1.socket通信模型
2.代码示例
2.1服务端
package com.java4all.controller;
import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
/**
* Author: yunqing
* Date: 2018/9/14
* Description:
*/
public class BeatServer {
/**server port*/
public static Integer PORT = 8113;
public static void main(String[] args){
//try with resources to close resources
try( //服务端
ServerSocket serverSocket = new ServerSocket(PORT);
//侦听到此套接字的连接并接受,此方法将一直阻塞,直到建立连接为止。
Socket socket = serverSocket.accept();
//接受客户端发送的信息
BufferedReader reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
//向客户端发送返回信息
PrintWriter writer = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())),true)
){
System.out.println("服务端在等待......");
int i = 0;
while (true){
//读取客户端数据
String str = reader.readLine();
if(str.equals("END")){
break;
}
System.out.println("客户端第"+(++i)+"次发来信息为:"+str);
//向客户端发送数据
writer.println("服务器接收到了客户端的消息【"+str+"】"+System.currentTimeMillis());
writer.flush();
}
}catch (Exception ex){
ex.printStackTrace();
}
}
}
2.2客户端
package com.java4all.controller;
import java.io.*;
import java.net.Socket;
/**
* Author: yunqing
* Date: 2018/9/14
* Description:
*/
public class BeatClient {
/**server host*/
private static String LOCALHOST = "127.0.0.1";
/**server port*/
private static Integer SERVERPORT = 8113;
public static void main(String[] args){
//try with resources to close resources
try( //指定服务器地址和端口
Socket socket = new Socket(LOCALHOST, SERVERPORT);
//接受服务器发送的返回消息
BufferedReader reader =
new BufferedReader(new InputStreamReader(socket.getInputStream()));
//向服务器发送消息
PrintWriter writer =
new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())));
){
for (int i = 1; i <= 10; i ++){
Thread.sleep(3000);
//像服务器发送请求
writer.println("这是我请求服务器的第:"+i+"次,"+System.currentTimeMillis());
writer.flush();
//获取服务器的响应信息
String str = reader.readLine();
System.out.println(str);
}
writer.println("END");
writer.flush();
}catch (Exception ex){
ex.printStackTrace();
}
}
}
3测试
先启动服务端,服务端会一直阻塞,等待客户端的请求,再启动客户端:
服务端打印结果如下:
服务端在等待......
客户端第1次发来信息为:这是我请求服务器的第:1次,1536911457490
客户端第2次发来信息为:这是我请求服务器的第:2次,1536911460492
客户端第3次发来信息为:这是我请求服务器的第:3次,1536911463494
客户端第4次发来信息为:这是我请求服务器的第:4次,1536911466494
客户端第5次发来信息为:这是我请求服务器的第:5次,1536911469495
客户端第6次发来信息为:这是我请求服务器的第:6次,1536911472497
客户端第7次发来信息为:这是我请求服务器的第:7次,1536911475499
客户端第8次发来信息为:这是我请求服务器的第:8次,1536911478501
客户端第9次发来信息为:这是我请求服务器的第:9次,1536911481501
客户端第10次发来信息为:这是我请求服务器的第:10次,1536911484501
客户端打印结果如下:
服务器接收到了客户端的消息【这是我请求服务器的第:1次,1536911457490】1536911457490
服务器接收到了客户端的消息【这是我请求服务器的第:2次,1536911460492】1536911460493
服务器接收到了客户端的消息【这是我请求服务器的第:3次,1536911463494】1536911463494
服务器接收到了客户端的消息【这是我请求服务器的第:4次,1536911466494】1536911466494
服务器接收到了客户端的消息【这是我请求服务器的第:5次,1536911469495】1536911469495
服务器接收到了客户端的消息【这是我请求服务器的第:6次,1536911472497】1536911472497
服务器接收到了客户端的消息【这是我请求服务器的第:7次,1536911475499】1536911475499
服务器接收到了客户端的消息【这是我请求服务器的第:8次,1536911478501】1536911478501
服务器接收到了客户端的消息【这是我请求服务器的第:9次,1536911481501】1536911481501
服务器接收到了客户端的消息【这是我请求服务器的第:10次,1536911484501】1536911484501