对于一个双向的tcp会话,tcp应为双向的持续长链接,
而有可能我们会通过多次创建socket实现类似多次通信,此种做法是较为浪费资源了。
故 研究一下如何 一个socket多次通信
flush()
java io 里面的方法 ,清空缓冲区,立即输出数据
强调一下, flush 之前,其io流 所加载的数据 最后应有个换行符,否则程序会阻塞
代码如下:
Server
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.text.SimpleDateFormat;
import java.util.Date;
public class Server {
public static void main(String[] args) {
try {
ServerSocket ss = new ServerSocket(8888);
System.out.println("启动服务器....");
Socket s = ss.accept();
BufferedReader br = new BufferedReader(new InputStreamReader(s.getInputStream()));
//读取客户端发送来的消息
String mess = br.readLine();
System.out.println(mess);
Date date = new Date();
SimpleDateFormat ft = new SimpleDateFormat("MM-dd");
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
bw.write("你好,客户端,今天是"+ft.format(date)+'\n');
bw.flush();
bw.write("你好,客户端,你叫什么名字\n");
bw.flush();
System.out.println(br.readLine());
} catch (IOException e) {
e.printStackTrace();
}
}
}
Client
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.net.Socket;
import java.net.UnknownHostException;
public class Client {
public static void main(String[] args) {
try {
Socket s = new Socket("127.0.0.1",8888);
System.out.println("启动客户端....");
//构建IO
InputStream is = s.getInputStream();
OutputStream os = s.getOutputStream();
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(os));
//向服务器端发送一条消息
bw.write("你好,服务器,请问今天几月几号?\n");
bw.flush();
//读取服务器返回的消息
BufferedReader br = new BufferedReader(new InputStreamReader(is));
String mess = br.readLine();
System.out.println(mess);
System.out.println(br.readLine());
bw.write("你好,服务器,我叫XXX\n");
bw.flush();
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}