Socket编程基本概念----imooc(2)
2016-09-21 00:19
288 查看
Socket编程2
@(JAVA)[socket, java]Socket编程基本概念—-imooc(1)
Socket编程基本概念—-imooc(2)
Socket编程基本概念—-imooc(3)
Socket编程2
使用多线程实现客户端的通信
使用多线程实现客户端的通信
上一篇最后实现了一个服务端和客户端之间的简单交流,这次要给服务端中加入多线程,可以接受很多个客户的消息,并记录其IP,和人数服务端(中间的代码提取到了多线程类中(第三段代码))
package imooc.socket; import java.io.*; import java.net.InetAddress; import java.net.ServerSocket; import java.net.Socket; /** * Created by zhangzexiang on 2016/9/17. * * 编程实现基于TCP的Socket通信,实现用户登录 * * 服务器端 */ public class Server { public static void main(String[] args){ try { //1 创建一个服务器段的Socket,即ServerSocket,指定绑定的端口,并监听此端口 ServerSocket serverSocket = new ServerSocket(8888); Socket socket = null; //record client number int count = 0; System.out.println("***server is beginning,wait client ***"); while (true) { //2 调用accept()方法开始监听,等待客户端的连接 socket = serverSocket.accept(); //create a new thread ServerThread serverThread = new ServerThread(socket); //start thread serverThread.start(); //多线程类(第三段代码) count++; //统计客户端的数量 System.out.println("client number: "+count); InetAddress address = socket.getInetAddress(); System.out.println("current client ip : "+address.getHostAddress()); } } catch (IOException e) { e.printStackTrace(); } } }
客户端(基本没变)
package imooc.socket; import java.io.*; import java.net.Socket; /** * Created by zhangzexiang on 2016/9/17. * * * 编程实现基于TCP的Socket通信,实现用户登录 * * 客户端 */ public class Client { public static void main(String[] args) { try { //1 创建客户端Socket,指定服务器地址和端口 Socket socket = new Socket("localhost",8888); //2 换取输出流,向服务器端发送信息 OutputStream os = socket.getOutputStream();//字节输出流 PrintWriter pw = new PrintWriter(os); //将输出流包装为打印流 pw.write("username:admin;password:123"); pw.flush(); socket.shutdownOutput();//colse outputStream //3 获取输入流,并读取服务器端的相应消息 InputStream is =socket.getInputStream(); BufferedReader br = new BufferedReader(new InputStreamReader(is)); String info = null; while((info=br.readLine())!=null){//循环读取服务端的信息 System.out.println("我是客户端,服务器说:"+info); } //4 colse resource br.close(); is.close(); pw.close(); os.close(); socket.close(); } catch (IOException e) { e.printStackTrace(); } } }
多线程(服务端用到)
package imooc.socket; import java.io.*; import java.net.Socket; /** * Created by zhangzexiang on 2016/9/19. * * 服务器线程处理类 */ public class ServerThread extends Thread{ //和本线程相关的Socket Socket socket = null; public ServerThread(Socket socket){ this.socket = socket; } //线程执行的操作,相应客户端的请求 public void run(){ InputStream is = null;//字节输入流 InputStreamReader isr = null;//将字节流转换为字符流 BufferedReader br = null;//为输入流添加缓冲 OutputStream os = null; PrintWriter pw = null; //包装为打印流 try { //3 获取输入流,并读取客户端信息 is = socket.getInputStream(); isr = new InputStreamReader(is); br = new BufferedReader(isr); String info = null; while((info=br.readLine())!=null){//循环读取客户端的信息 System.out.println("我是服务器,客户端说:"+info); } socket.shutdownInput();//关闭输入流 //4 获取输出流,响应客户端的请求 os = socket.getOutputStream(); pw = new PrintWriter(os); pw.write("welcome!"); pw.flush();//调用flush()方法将缓冲输出 } catch (IOException e) { e.printStackTrace(); } finally { try { //5 关闭资源 if(pw!=null) pw.close(); if(os!=null) os.close(); if(br!=null) br.close(); if(isr!=null) isr.close(); if(is!=null) is.close(); if(socket!=null) socket.close(); } catch (IOException e) { e.printStackTrace(); } } } }
运行结果(是用一个用户来模拟多个用户,所以IP一样,但是IP为啥是127.0.0.1呢???)
***server is beginning,wait client *** client number: 1 current client ip : 127.0.0.1 我是服务器,客户端说:username:admin;password:123 client number: 2 current client ip : 127.0.0.1 我是服务器,客户端说:username:admin;password:123
相关文章推荐
- Socket编程基本概念----imooc(1)
- Socket编程基本概念----imooc(3)
- 黑马程序员--10.网络编程--02.【网络传输三要素在Java中的体现】【TCP和UDP概念】【Socket基本概念】
- 网络编程 ——socket基本概念
- socket 网络编程基本的概念
- C# Socket编程(1)基本的术语和概念
- Linux网络编程学习笔记(3)---socket编程中的基本概念
- C# Socket编程(1)基本的术语和概念
- socket编程--socket基本概念
- socket编程--socket基本概念
- C# Socket编程(1)基本的术语和概念
- Beej网络socket编程指南——基本概念(2)
- Java Socket编程(一) Socket编程原理及基本概念
- Socket编程实践(1) 基本概念
- 关于网络协议和socket编程基本概念
- DotNET(C#) Socket基本编程 (转)
- socket基本概念及网络协议模型
- AOP 面向方面编程的介绍----基本概念(2)
- 最基本的Socket编程 C#版 [转]
- 最基本的Socket编程 C#版