java tcp套接字实现一个简单回显的网络通信

编写一个简单回显的网络通信程序:服务器将接收到的客户端数据原封不动返回给客户端

步骤一:

创建服务器类:SimpleEchoServer,完成服务器套接字的创建和监听

import java.io.DataInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;


public class SimpleEchoServer {

	public static void main(String[] args) throws IOException, InterruptedException {
		System.out.println("SimpleEchoServer");
		int port=8000;
		ServerSocket tcpServer=new ServerSocket(port);//创建ServerSocket,绑定端口port
		System.out.printf("服务器启动成功,监听%d号端口\n",port);
		Socket socket=tcpServer.accept();//使用tcpserverej接收客户端连接
		System.out.printf("客户端连接成功,客户端是(%s:%d)",socket.getInetAddress(),socket.getPort());
		InputStream socketIn=socket.getInputStream();//获取套接字socket的输入流
		DataInputStream dataIn=new DataInputStream(socketIn);//使用socketIn封装成一个数据输入流
		while(true){
			String msg;
			try{
				msg=dataIn.readUTF();
			}catch(Exception e){
				System.out.printf("客户端断开tcp连接,程序退出");
				socket.close();
				break;
			}
			System.out.printf("服务器收到的消息是:%s",msg);
		}
		tcpServer.close();
	}

}

运行程序SimpleEchoServer,打开控制台,输入命令:netstat -ano | findstr "8000",观察端口的监听情况。


步骤二:

创建客户端类:SimpleEchoClient ,完成客户端套接字的创建和客户端连接服务器

import java.io.DataOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.net.InetSocketAddress;
import java.net.Socket;
import java.net.SocketAddress;
import java.util.Scanner;


public class SimpleEchClient {

	public static void main(String[] args) throws IOException, InterruptedException {
		System.out.println("SimpleEchClient");
		Socket socket=new Socket();//创建socket
		String serverIP="127.0.0.1";
		int serverPort=8000;
		SocketAddress serverSocketAddress=new InetSocketAddress(serverIP,serverPort);//serverIP,serverPort定义服务器套接字地址
		socket.connect(serverSocketAddress);//socket连接服务器套接字地址
		System.out.printf("成功连接服务器,本机端口的信息是{%s:%d}\n",socket.getLocalAddress(),socket.getLocalPort());
		OutputStream socketOut=socket.getOutputStream(); //获取套接字socket的输出流
		DataOutputStream dataout =new DataOutputStream(socketOut);
		Scanner scanner=new Scanner(System.in);
		while(true){
			System.out.println("输入要发送字符串(输入'Q'或者'q'表示退出连接):");
			String msg=scanner.nextLine();
			if(msg.equalsIgnoreCase("q")){
				System.out.println("客户端断开tcp连接,程序退出");
				socket.close();//关闭套接字socket
				break;
			}
			System.out.printf("客户端发送的消息是:{%s}\n",msg);
			dataout.writeUTF(msg);
		}
		scanner.close();

	}

}

运行验证,服务器将收到来自客户端的消息返回给客户端,客户端接受服务器的回显消息,并打印在控制台




猜你喜欢

转载自blog.csdn.net/weixin_42442713/article/details/80900140