今天才开始接触java网络编程,作为一个程序菜鸟,只是基本的学习了一下ServerSocket和Socket,估计连皮毛都算不上,唉,一步一步网上爬。。。
模拟服务器使用了ServerSocket对本机的9999端口进行监听,而使用Socket模拟客户端与9999端口服务器进行通信,交换数
(PS:可以在cmd中使用netstat -an来查看端口使用情况,也可以使用netstat -anb来检查端口使用详情,注意以管理员身份运行cmd)
代码如下:
服务器:
//定义一个服务器 监听9999端口 package ServerTest1; import java.io.*; import java.net.*; public class MyServer1 { public MyServer1(){ try { //用ServerSocket在9999端口进行监听 ServerSocket ss = new ServerSocket(9999); System.out.println("我是服务器,我在9999端口进行监听"); //等待某个客户端程序来连接,该函数会返回一个socket连接 //等待过程中程序会在下面一行代码卡住,直到有客户端进程连接 Socket s = ss.accept(); System.out.println("连接建立"); //连接成功后 接收数据 InputStreamReader isr = new InputStreamReader(s.getInputStream()); BufferedReader br = new BufferedReader(isr); System.out.println("我是服务器,我接受到了数据:"+br.readLine()); //服务器接受到数据后,反馈数据给客户端 //需要定义服务器自己的PrintWriter PrintWriter pw = new PrintWriter(s.getOutputStream(),true); pw.println("客户端你好,我是服务器"); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } public static void main(String[] args) { // TODO Auto-generated method stub MyServer1 ms = new MyServer1(); } }
客户端:
//定义一个客户端,用于与9999端口的服务器程序进行连接交互 package ClientTest1; import java.io.*; import java.net.*; public class MyClient1 { public MyClient1(){ try { //使用Socket与本机9999端口连接 Socket s = new Socket("127.0.0.1",9999); //连接成功后 向服务器发送数据 //我们通过pw来向s写入数据 true代表即时刷新 PrintWriter pw = new PrintWriter(s.getOutputStream(),true); pw.println("服务器你好,我是客户端^_^"); //接受来自服务器的反馈 InputStreamReader isr = new InputStreamReader(s.getInputStream()); BufferedReader br = new BufferedReader(isr); System.out.println("我是客户端,收到反馈:"+br.readLine()); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } public static void main(String[] args) { // TODO Auto-generated method stub MyClient1 mc = new MyClient1(); } }
运行效果:
服务器:
客户端: