一、服务端
服务端只需创建服务端Socket,并绑定端口号,使用accept()方法等待客户端连接,如果没有客户端连接,则一直阻塞,有客户端连接,返回客户端Socket对象(即客户端端口号)。接下来读取客户端输入信息,并向客户端输出信息。最后,关闭输入输出流。
package com.bite;
import java.io.IOException;
import java.io.PrintStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Scanner;
public class SingleServer {
public static void main(String[] args) throws Exception{
//服务器绑定端口号
ServerSocket serverSocket=new ServerSocket(666);
try{
System.out.println("等待客户端连接");
//等待客户端连接,如果没有客户端连接,则一直阻塞,有客户端连接,返回客户端Socket对象
Socket client=serverSocket.accept();
System.out.println("有新的客户端连接,端口号为:"+client.getPort());
//获取客户端输入输出流
Scanner clientInput=new Scanner(client.getInputStream());
clientInput.useDelimiter("\n");
PrintStream clientOut=new PrintStream(client.getOutputStream(),true,"UTF-8");
//获取客户端输入
if(clientInput.hasNext()){
System.out.println(client.getInetAddress()+"说:"+clientInput.next());
}
//向客户端输出
clientOut.println("hello ,I am a Server");
clientInput.close();
clientOut.close();
serverSocket.close();
}catch(IOException e){
System.out.println("服务器端通信出现异常");
}
}
}
二、客户端
创建客户端Socket连接服务器,绑定服务器地址和端口号。向服务器输出信息,读取服务器输入信息。最后关闭输入输出流。
package com.bite;
import java.io.IOException;
import java.io.PrintStream;
import java.net.Socket;
import java.util.Scanner;
public class SingleClient {
public static void main(String[] args) throws Exception {
String serverName="127.0.0.1";
Integer port=666;
try{
//创建客户端Socket连接服务器
Socket client=new Socket(serverName,port);
System.out.println("连接到服务器,服务器地址为:"+client.getInetAddress());
//获取输入输出流
PrintStream out=new PrintStream(client.getOutputStream(),true,"UTF-8");
Scanner in=new Scanner(client.getInputStream());
in.useDelimiter("\n");
//向服务器输出内容
out.println("hello I am a Client");
//读取服务器内容
if(in.hasNext()){
System.out.println("服务器发送消息为:"+in.next());
}
in.close();
out.close();
client.close();
}catch(IOException e){
System.out.println("客户端通信出现了问题");
}
}
}
以上实现简单的单线程服务器与客户端间的通信。