JAVA中有一个用来网络编程的类就是Socket,通过它提供的Api可以实现服务端与客户端之间的通信
使用Socket实现简单的单向通信
首先如果要实现通信,肯定要有个服务端和客户端。
服务端
//指定端口
int port = 9999;
ServerSocket serverSocket = new ServerSocket(port);
//监听客户端发送的消息
Socket socket = serverSocket.accept();
//输入流读取消息
InputStream inputStream = socket.getInputStream();
byte[] b = new byte[1024];
int len;
StringBuilder message = new StringBuilder();
while ((len=inputStream.read(b))!=-1){
message.append(new String(b,0,len,"UTF-8"));
}
System.out.println(message);
//关流
inputStream.close();
socket.close();
serverSocket.close();
客户端
//连接服务器ip地址和对应端口
String ip = "127.0.0.1";
int port = 9999;
Socket socket = new Socket(ip,port);
//获取输出流发送信息
OutputStream outputStream = socket.getOutputStream();
String message = "你好啊";
outputStream.write(message.getBytes("UTF-8"));
//关流
outputStream.close();
socket.close();
这样一个客户端和服务端就造好了。
接着先运行服务端,在运行客户端。
结果如下所示:在服务端上能收到客户端的消息
制作双向通信
上面的例子中,服务端有输入流用来读取,客户端有输出流用来发送.那么在服务端里面在加入一个输出流,客户端加入一个输入流就能互相的读取和发送消息了.
服务端:
ServerSocket serverSocket = new ServerSocket(9999);
Socket socket = serverSocket.accept();
InputStream inputStream = socket.getInputStream();
byte[] bytes = new byte[1024];
int len;
StringBuilder sb = new StringBuilder();
while ((len=inputStream.read(bytes)) != -1){
sb.append(new String(bytes,0,len,"UTF-8"));
}
System.out.println("客户端:"+sb);
//到这开始添加输入流让服务端发送消息
OutputStream outputStream = socket.getOutputStream();
Scanner sc = new Scanner(System.in);
String message = sc.nextLine();
outputStream.write(message.getBytes("UTF-8"));
socket.close();
inputStream.close();
outputStream.close();
serverSocket.close();
上面添加了输入流来让服务端在接受消息后发送消息
客户端:
//连接服务器ip地址和对应端口
String ip = "127.0.0.1";
int port = 9999;
Socket socket = new Socket(ip,port);
//获取输出流发送信息
OutputStream outputStream = socket.getOutputStream();
Scanner sc = new Scanner(System.in);
String message = sc.nextLine();
outputStream.write(message.getBytes("UTF-8"));
//用这个关流,来通知服务器这边已经写完了
socket.shutdownOutput();
InputStream inputStream = socket.getInputStream();
byte[] b = new byte[1024];
int len;
StringBuilder sb = new StringBuilder();
while ((len=inputStream.read(b))!=-1){
sb.append(new String(b,0,len, "UTF-8"));
}
System.out.println(sb);
//关流
inputStream .close();
outputStream.close();
socket.close();
接着启动服务端和客户端,就可以发送消息了。
结果如下:
客户端:
服务端:
这样服务端和客户端就能简单的互相发送一次消息了。