Socket-TCP-3
2015-10-31 15:14
561 查看
本次可以实现一个服务端接收多个客户端的请求,将接收客户请求的代码封装到线程类中,可以记录客户端数量及其IP地址:
服务线程类:
服务端类:
客户端不变:
先运行服务端:
再启动客户端:
这时服务端输出:
然后将客户端代码里的用户名和密码改一下:
再次运行客户端:
这时服务端输出:
由于都是在本地同一台机器的客户端,所以IP都是一样的。
服务线程类:
package jimo.love; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; import java.io.PrintWriter; import java.net.Socket; public class ServerThread extends Thread { /* * 服务器线程处理 */ Socket sket = null; //构造方法 public ServerThread(Socket sket){ this.sket = sket; } //将接收客户端请求的操作写在线程里 @Override public void run() { InputStream is = null; OutputStream os = null; InputStreamReader isr = null; BufferedReader br = null; PrintWriter pw = null; String info = null; try { is = sket.getInputStream(); isr = new InputStreamReader(is); br = new BufferedReader(isr); while(null != (info = br.readLine())){ System.out.println("这里是服务端,客户端说:"+info); } //关闭输入流 sket.shutdownInput(); os = sket.getOutputStream(); pw = new PrintWriter(os); pw.write("欢迎您!"); pw.flush(); //关闭输出流 sket.shutdownOutput(); } catch (IOException e) { e.printStackTrace(); }finally{ //关闭资源 try { if(null!=is){ is.close(); } if(null!=isr){ isr.close(); } if(null!=os){ os.close(); } if(null!=br){ br.close(); } if(null!=pw){ pw.close(); } } catch (IOException e) { e.printStackTrace(); } } } }
服务端类:
package jimo.love; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.net.InetAddress; import java.net.ServerSocket; import java.net.Socket; public class Server { public static void main(String[] args) { /* * 服务端 */ try { //建立服务器端socket,并监听此端口9000 ServerSocket ssket = new ServerSocket(9000); System.out.println("---服务器端启动---"); Socket sket = null; int num = 0;//客户端的数量 while(true){ //调用accept方法监听,等待客户端连接 sket = ssket.accept(); //创建一个新的线程 ServerThread st = new ServerThread(sket); //开启线程 st.start(); //记录客户端的数量 num++; System.out.println("当前客户数量:"+num); //获取每个客户端的IP InetAddress ia = sket.getInetAddress(); System.out.println("IP:"+ia.getHostAddress()); } } catch (IOException e) { e.printStackTrace(); } } }
客户端不变:
package jimo.love; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.ObjectInputStream.GetField; import java.io.OutputStream; import java.io.PrintWriter; import java.net.Socket; import java.net.UnknownHostException; public class Client { public static void main(String[] args) { /* * 客户端 */ try { //创建客户端socket,指定服务器地址和端口,localhost代表本机地址 Socket sket = new Socket("localhost",9000); //获取输出流,向服务器发送信息 OutputStream os = sket.getOutputStream(); //将字节输出流包装为打印输出流 PrintWriter pw = new PrintWriter(os); pw.write("username:jimo;password:111"); //清空缓存,将消息发送 pw.flush(); //关闭socket输出流 sket.shutdownOutput(); //接收服务器的反馈 InputStream is = sket.getInputStream(); InputStreamReader isr = new InputStreamReader(is); BufferedReader br = new BufferedReader(isr); String info = null; while(null != (info = br.readLine())){ System.out.println("这里是客户端,服务器端反馈说:"+info); } //关闭资源 is.close(); isr.close(); br.close(); os.close(); pw.close(); sket.close(); } catch (UnknownHostException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } }
先运行服务端:
再启动客户端:
这时服务端输出:
然后将客户端代码里的用户名和密码改一下:
pw.write("username:lonely;password:222");
再次运行客户端:
这时服务端输出:
由于都是在本地同一台机器的客户端,所以IP都是一样的。
相关文章推荐
- Android网络开发之Volley--Volley基本用法JsonObjectReques(二)
- 解决springMCV后台接收不到AngularJ的$http.post参数的方法
- Android网络开发之Volley--Volley基本用法StringRequest(一)
- 计算机网络基础
- 收藏一个Ping的小工具类,可用于网络中检测目的设备是否在线
- 网络编程
- HTML学习11:HTTP 方法
- HTTP请求报文和HTTP响应报文
- DL:Hopfield 神经网络
- HTTP请求中的form data和request payload的区别
- 解读HTTP包
- http协议web服务器
- HTTP 终结者 ASI
- http请求
- BP神经网络的设计实例(MATLAB编程) .
- Http的操作(不传递参数)
- Android实现异步处理 -- HTTP请求
- git访问https
- 网络传输
- 做好的uboot网络版的一套东西的截…