package demo.network.tcp.other;
import java.io.*;
import java.net.InetAddress;
import java.net.ServerSocket;
import java.net.Socket;
//客户端
class TransClient implements Runnable {
private Socket socket;
TransClient(Socket socket) {
this.socket = socket;
}
@Override
public void run() {
BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in));
try {
//将从键盘录入的数据发给服务器
PrintWriter out = new PrintWriter(socket.getOutputStream());//可用自动刷新
String line = null;//储存发送的数据
//读取服务器返回的大写数据
BufferedReader bufIn = new BufferedReader(new InputStreamReader(socket.getInputStream()));
while ((line = bufr.readLine()) != null) {
out.println(line);//发给服务器原数据,且必须加上换行,因为服务端是每次读一行(需要\n的结束标记)
out.flush();//必须刷新,不刷新数据只存在PrintWriter中,并没有给服务端
System.out.println(bufIn.readLine());//打印大写数据
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
bufr.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
//服务器
class TransServer implements Runnable {
private ServerSocket serverSocket;
TransServer(ServerSocket serversocket) {
this.serverSocket = serversocket;
}
@Override
public void run() {
Socket socket = null;
try {
//获取连接过来的客户端对象
socket = serverSocket.accept();
//将客户端对象的输入流转换为字符输入流并使用缓冲区修饰
BufferedReader bufr = new BufferedReader(new InputStreamReader(socket.getInputStream()));
//反馈给客户端信息(将客户端发来数据转化为大写)
OutputStream out = socket.getOutputStream();
String line = null;
while ((line = bufr.readLine()) != null) {
System.out.println(socket.getInetAddress().getHostAddress() + ": " + line);//打印客户端发送的原数据
out.write(line.toUpperCase().getBytes());//将客户端发来数据转化为大写,并发送回去
out.write("\n".getBytes());//同理,客户端也是每次从服务端读取一行,需要有换行标记,否则一直阻塞
out.flush();//刷新才能立刻发给客户端
//简洁操作:可用true自动刷新和Print打印流的prinln
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (socket != null)
socket.close();
serverSocket.close();//关闭服务器
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
class TextTrans {
public static void main(String[] args) throws IOException {
TransServer ts = new TransServer(new ServerSocket(8080));//务必优先开启服务端
TransClient tc = new TransClient(new Socket(InetAddress.getLocalHost().getHostAddress(), 8080));
new Thread(ts).start();
new Thread(tc).start();
}
}
转换大写TCP模拟
最新推荐文章于 2023-07-14 11:03:45 发布
本文介绍了如何使用Java实现一个简单的TCP通信协议,通过TransClient和TransServer类,实现在客户端输入的数据经过服务器端转换为大写后返回给客户端。展示了客户端与服务器交互的基本流程和数据处理过程。
861

被折叠的 条评论
为什么被折叠?



