TCP通信
解题思路
- 首先肯定是服务端启动,因为我们用户随时都有可能访问服务端,所以服务端需要一直启动,等待被访问。
- 然后客户发送消息给服务端,那么客户端就是输出流,然后将消息写出来;服务端就是输入流,将消息读进去。
- 上面这样就完成了一次交流,那么服务端再作为输出流,将消息写出来发送给客户端;客户端就是输入流,将消息读进去。
- 上述操作就完成了一次双向通信。然后将此过程给个死循环,那么服务端和客户端之间可以一直保持稳定通讯。(这步就不写了)
上代码
客户端。所有异常都抛了,这样方便理顺思路,但是开发最好不要这么做。切记
public class User {
public static void main(String[] args) throws UnknownHostException, IOException {
//1.创建Socket,用来发送请求
Socket socket = new Socket(InetAddress.getByName("127.0.0.1"), 8991);
// 前面个参数是传入127.0.0.1这个地址的主机是自己的主机,后面是自己的端口号这个随便写最好写8000以上的,客户端和服务端的端口号一定要相同
//创建输出流
DataOutputStream dos = new DataOutputStream( socket.getOutputStream());
DataInputStream dis = new DataInputStream( socket.getInputStream());
//发送数据
String info = "我是客户端";
dos.writeUTF(info); //writeUTF(String) 这个就是写字符串,DataOutputStream这个可以操作基本数据类型和String,
//接受服务端发送的消息
String str = dis.readUTF();
System.out.println("我客户端已收到消息: " + str);
//关闭流以及socket
dos.close();
dis.close();
socket.close();
}
}
服务端的,直接抛最大的异常,哈哈哈,菜鸡一个
public class Server {
public static void main(String[] args) throws Exception {
//1.创建一个ServerSocket,指定等待端口
ServerSocket serverSocket = new ServerSocket(8991);
//2.使用ServerSocket接收用户的请求(处于监听状态)
Socket socket = serverSocket.accept();
//3.创建输入流和输出流
DataInputStream dis = new DataInputStream( socket.getInputStream());
DataOutputStream dos = new DataOutputStream(socket.getOutputStream());
//4.接收用户数据并输出
String str = dis.readUTF(); //读取字符串
System.out.println("服务端已收到消息:" + str);
//5.发送反馈信息,给客户端发送表示已接受的消息
String s = "我服务端已收到您的消息";
dos.writeUTF(s);
//6.关闭流和socket
dis.close();
dos.close();
socket.close();
serverSocket.close();
}
}
然后先启动服务端,再启动客户端。
得到正确结果。
服务端的
客户端的
这样就完成了一次双工通讯。