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();
}
}