public class TCPClient {
public static void main(String[] args) throws IOException {
Socket socket = new Socket("192.168.196.1", 9999);
// InetAddress localHost = InetAddress.getLocalHost();
// String hostAddress = localHost.getHostAddress();
// System.out.println(hostAddress);
//获取通道输出流
OutputStream out = socket.getOutputStream();
//包装输出流
BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(out));
//需要上传的文件
BufferedReader reader = new BufferedReader(new FileReader("Client.txt"));
String line = null;
while ((line = reader.readLine())!=null) {
writer.write(line);
writer.newLine();
writer.flush();
}
//禁用此套接字的输出流。对于 TCP 套接字,任何以前写入的数据都将被发送,并且后跟 TCP 的正常连接终止序列
//表示我输出完了
socket.shutdownOutput();
//收取服务端发来的反馈
InputStream in = socket.getInputStream();
byte[] bytes = new byte[1024 * 8];
int len = in.read(bytes);
String s = new String(bytes, 0, len);
System.out.println(s);
socket.close();

}
}
public class TCPServer {
public static void main(String[] args) throws IOException {
ServerSocket serverSocket = new ServerSocket(9999);
System.out.println("服务器已开启等待连接....");
int i = 0;
while (true) {
System.out.println((i++)+"位客户端已连接");
Socket accept = serverSocket.accept();
//采用多线程方式
new UploadThread(accept).start();
}

}
}
public class UploadThread extends Thread {
private Socket accept;

public UploadThread(Socket accept) {

this.accept = accept;
}

@Override
public void run() {
try {
InputStream in = accept.getInputStream();
//包装输入流
BufferedReader reader = new BufferedReader(new InputStreamReader(in));
//为了防止文件覆盖System.currentTimeMillis
BufferedWriter writer = new BufferedWriter(new FileWriter(System.currentTimeMillis() + "copy.txt"));
String line = null;
while ((line = reader.readLine())!=null) {
writer.write(line);
writer.newLine();
writer.flush();
}
//服务端反馈
OutputStream out = accept.getOutputStream();
out.write("上传成功!".getBytes());
writer.close();
reader.close();
} catch (IOException e) {
e.printStackTrace();
}

}