TCP通信程序的练习6
- 客户端:数据来自文本文件,接受服务器反馈
ClientDemo类(客户端)
package Demo;
import java.io.*;
import java.net.InetAddress;
import java.net.Socket;
import java.net.UnknownHostException;
/*
TCP通信程序的练习
练习6:
客户端:数据来自文本文件,接受服务器反馈
服务器:接收的数据写入文本文件,给出反馈,代码用线程进行封装,为每一个客户端开启一个线程
*/
public class ClientDemo {
public static void main(String[] args) throws IOException {
//建立客户端
Socket sgs = new Socket(InetAddress.getByName("sgs").getHostAddress(), 1110);
BufferedReader br = new BufferedReader(new FileReader("C:\\LianXi\\java.txt"));
//获取输出流,写数据,采取字符缓冲流(一次写入一行),接受服务器反馈
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(sgs.getOutputStream()));
String line, line2;
while ((line = br.readLine()) != null) {
bw.write(line);
bw.newLine();
bw.flush();
}
//void shutdownOutput(); 禁用此套接字的输出流。
sgs.shutdownOutput();
//给出反馈信息
BufferedReader br1 = new BufferedReader(new InputStreamReader(sgs.getInputStream()));
//给出反馈信息
while (((line2 = br1.readLine()) != null)) {
System.out.println("服务器" + line2);
}
//释放资源
sgs.close();
}
}
ServerDemo类(服务器)
package Demo;
import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
class SocketImp implements Runnable {
private Socket sgs;
//实施上锁
private Object obj = new Object();
public SocketImp(Socket sgs) {
this.sgs = sgs;
}
@Override
public void run() {
BufferedReader br = null;
BufferedWriter bw = null;
synchronized (obj) {
try { //获取输入流,读数据,并写入文本文件中
br = new BufferedReader(new InputStreamReader(sgs.getInputStream()));
bw = new BufferedWriter(new FileWriter("c:\\Lianxi\\javaCopy.txt"));
int count = 0;//定义一个跳数器
File file = new File("C:\\LianXi\\javaCopy.txt");
while (file.exists()) {//如果存在该文件,那我就利用跳数变一次
count++;
file = new File("C:\\LianXi\\javaCopy(" + count + ").txt");
}
//每次都会封装一个新的文件然后录入数据
bw = new BufferedWriter(new FileWriter(file));
String line;
while ((line = br.readLine()) != null) {//等待发送的数据
bw.write(line);
bw.newLine();
bw.flush();
}
//给客户端反馈信息
BufferedWriter bw1 = new BufferedWriter(new OutputStreamWriter(sgs.getOutputStream()));
bw1.write("已传输完成");
bw1.newLine();
bw1.flush();
} catch (IOException e) {
e.printStackTrace();
} finally {
if (br != null) {
try {
br.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (bw != null) {
try {
bw.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
}
public class ServerDemo {
public static void main(String[] args) throws IOException {
//建立服务器
ServerSocket sk = new ServerSocket(1110);
while (true) {//为了使服务器都是开的我们采取while循环来体现服务器
//侦听此客户端套接字并建立连接
Socket sgs = sk.accept();
//创建线程
new Thread(new SocketImp(sgs)).start();
}
// //释放资源
// sk.close();服务器一直开着就不需要释放资源
}
}
- 服务器:接收的数据写入文本文件,给出反馈,代码用线程进行封装,为每一个客户端开启一个线程
- 原因:


输出的内容:
版权声明:本文为o676448原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。