基于TCP协议的网络编程可以实现C/S结构的程序,C客户端发送数据,S服务器端接收数据后发回给客户端,客户端接收后输出到屏幕。客户端通过创建Socket连接服务器,服务器端监听到连接后,也创建Socket,两端的Socket连在一起,形成一个输出输出流,客户端发送消息,用输出流,服务器端接收消息用输入流,反之亦然。
客户端代码tcp. EchoClient
package test; import java.io.*; import java.net.Socket; import java.net.UnknownHostException; //客户端 public class Client { public static void main(String[] args) { String hostName=""; int portNumber=7; try { Socket echoSocket=new Socket(hostName,portNumber); PrintWriter out=new PrintWriter(echoSocket.getOutputStream(),true); BufferedReader in=new BufferedReader(new InputStreamReader(echoSocket.getInputStream())); BufferedReader stdIn=new BufferedReader(new InputStreamReader(System.in)); String userInput; while((userInput=stdIn.readLine())!=null) { out.println(userInput); System.out.println("echo:"+in.readLine()); } }catch(UnknownHostException e) { e.printStackTrace(); System.exit(1); }catch(IOException e) { e.printStackTrace(); System.exit(1); } } }
服务器端代码tcp. EchoServer
package test; import java.io.*; import java.net.ServerSocket; import java.net.Socket; //服务器端 public class Server { public static void main(String[] args) { try { ServerSocket serverSocket=new ServerSocket(7); Socket clientSocket=serverSocket.accept(); PrintWriter out=new PrintWriter(clientSocket.getOutputStream(),true); BufferedReader in=new BufferedReader(new InputStreamReader(clientSocket.getInputStream())); String inputLine; while((inputLine=in.readLine())!=null) { System.out.println("来自客户端:"+inputLine); out.println(inputLine); } }catch(IOException e) { e.printStackTrace(); } } }
运行时,先运行服务器端,再运行客户端,在客户端输入数据,发送给服务器,服务器接收后再返回给客户端,客户端接收后打印到屏幕。
客户端界面:
服务器端界面:
tips: 如果Address already in use: JVM_Bind 端口被占用 解决方法:假设端口为1099
1.启动cmd, 执行命令
netstat -ano|findstr 1099
2.会查询出占用端口号的进程号,这时候执行命令
taskkill -f -pid 进程号
杀死进程,然后重启Tomcat即可解决