编写一个简单回显的网络通信程序:服务器将接收到的客户端数据原封不动返回给客户端
步骤一:
创建服务器类: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();
}
}
运行验证,服务器将收到来自客户端的消息返回给客户端,客户端接受服务器的回显消息,并打印在控制台