TCP数据传输:上传文本文件并给出反馈
Posted 工程哥
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了TCP数据传输:上传文本文件并给出反馈相关的知识,希望对你有一定的参考价值。
TCP数据传输(五):上传文本文件并给出反馈
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.ServerSocket;
import java.net.Socket;
public classUploadServer
public static void main(String[] args) throws IOException
// 创建服务器端的Socket对象
ServerSocketss = newServerSocket(11111);
// 监听客户端连接
Sockets = ss.accept();// 阻塞
// 封装通道内的流
BufferedReaderbr = newBufferedReader(newInputStreamReader(
s.getInputStream()));
// 封装文本文件
BufferedWriterbw = newBufferedWriter(newFileWriter("Copy.java"));
Stringline = null;
while ((line = br.readLine())!= null) // 阻塞
// if("over".equals(line))
// break;
//
bw.write(line);
bw.newLine();
bw.flush();
// 给出反馈
BufferedWriterbwServer = newBufferedWriter(newOutputStreamWriter(
s.getOutputStream()));
bwServer.write("文件上传成功");
bwServer.newLine();
bwServer.flush();
// 释放资源
bw.close();
s.close();
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.Socket;
/*
* 按照我们正常的思路加入反馈信息,结果却没反应。为什么呢?
* 读取文本文件是可以以null作为结束信息的,但是呢,通道内是不能这样结束信息的。
* 所以,服务器根本就不知道你结束了。而你还想服务器给你反馈。所以,就相互等待了。
*
* 如何解决呢?
* A:在多写一条数据,告诉服务器,读取到这条数据说明我就结束,你也结束吧。
* 这样做可以解决问题,但是不好。
* B:Socket对象提供了一种解决方案
* publicvoid shutdownOutput()
*/
public classUploadClient
public static void main(String[] args) throws IOException
// 创建客户端Socket对象
Sockets = newSocket("192.168.12.92", 11111);
// 封装文本文件
BufferedReaderbr = newBufferedReader(newFileReader(
"InetAddressDemo.java"));
// 封装通道内流
BufferedWriterbw = newBufferedWriter(newOutputStreamWriter(
s.getOutputStream()));
Stringline = null;
while ((line = br.readLine())!= null) // 阻塞
bw.write(line);
bw.newLine();
bw.flush();
//自定义一个结束标记
// bw.write("over");
// bw.newLine();
// bw.flush();
//Socket提供了一个终止,它会通知服务器你别等了,我没有数据过来了
s.shutdownOutput();
// 接收反馈
BufferedReaderbrClient = newBufferedReader(newInputStreamReader(
s.getInputStream()));
Stringclient = brClient.readLine(); // 阻塞
System.out.println(client);
// 释放资源
br.close();
s.close();
以上是关于TCP数据传输:上传文本文件并给出反馈的主要内容,如果未能解决你的问题,请参考以下文章