java-模拟服务端和客户端进行tcp通信

TCP通信

在这里插入图片描述

在这里插入图片描述

解题思路

  1. 首先肯定是服务端启动,因为我们用户随时都有可能访问服务端,所以服务端需要一直启动,等待被访问。
  2. 然后客户发送消息给服务端,那么客户端就是输出流,然后将消息写出来;服务端就是输入流,将消息读进去。
  3. 上面这样就完成了一次交流,那么服务端再作为输出流,将消息写出来发送给客户端;客户端就是输入流,将消息读进去。
  4. 上述操作就完成了一次双向通信。然后将此过程给个死循环,那么服务端和客户端之间可以一直保持稳定通讯。(这步就不写了)

上代码

客户端。所有异常都抛了,这样方便理顺思路,但是开发最好不要这么做。切记

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

然后先启动服务端,再启动客户端。
得到正确结果。
服务端的
在这里插入图片描述
客户端的
在这里插入图片描述
这样就完成了一次双工通讯。

猜你喜欢

转载自blog.csdn.net/toomemetoo/article/details/112910194