TCP协议案例
利用我们之前学习的TCP协议,传输字符、文件、通过服务器接收之后显示、保存到文件、给客户端反馈!
练习1:
客户端:发送消息,接收服务器反馈
服务器:接收数据,给出反馈
练习2:
客户端:数据来源于键盘录入,知道输入的数据是886,发送数据结束
服务器:接收到的诗句在控制台显示
练习3:
客户端:数据来自于键盘录入,知道输入的数据是886,发送结束
服务器:接收到的数据写入文本文件
练习4:
客户端:数据来自于文本文件
服务器:接收到的数据写入文本文件
练习5:
客户端:数据来自于文本文件,接收服务器反馈
服务器:接收到的数据写入文本文件,给出反馈
出现问题:
程序一直等待
原因:
读数据的方法是阻塞式的
解决办法:
自定义结束标记,使用shutdownOutput()方法 -->推荐
练习6:
客户端:数据来自于文本文件,接收服务器反馈
服务器端:接收到的数据写入文本文件,给出反馈,代码用线程进行封装,为每个客户端开启一个线程
客户端:SendDemo.java文件
public class SendDeom {
public static void main(String[] args) throws IOException {
//创建客户端Socket对象
Socket s = new Socket("192.168.0.165", 10086);
//封装文本文件的数据
BufferedReader br = new BufferedReader(new FileReader("qq.txt"));
//封装输出流写入数据
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
String line;
while ((line = br.readLine()) != null) {
bw.write(line);
bw.newLine();
bw.flush();
}
//结束标记
s.shutdownOutput();
//接收服务器的反馈
BufferedReader brs = new BufferedReader(new InputStreamReader(s.getInputStream()));
String data = brs.readLine();
System.out.println("服务器的反馈:" + data);
//释放资源
br.close();
s.close();
}
public static void main5(String[] args) throws IOException {
//创建客户端Socket对象
Socket s = new Socket("192.168.137.24", 10086);
//封装文本文件的数据
BufferedReader br = new BufferedReader(new FileReader("qq.txt"));
//封装输出流写入数据
BufferedWriter bws = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
String line;
while ((line = br.readLine()) != null) {
bws.write(line);
bws.newLine();
bws.flush();
}
//自定义结束标记
bws.write("886");
bws.newLine();
bws.flush();
//接收反馈
BufferedReader brSend = new BufferedReader(new InputStreamReader(s.getInputStream()));
String data = brSend.readLine(); //等待读取数据
System.out.println("服务器的反馈:" + data);
//释放资源
br.close();
s.close()