简单实现基于TCP的Socket多线程通信
2015-04-29 16:12
274 查看
/* * 客户端 */ public class Client { public static void main(String[] args) { try { Socket socket = new Socket("127.0.0.1",6666); OutputStream os = socket.getOutputStream(); //获取输出流,向服务器发送信息 PrintWriter pw = new PrintWriter(os);//将输出流包装成打印流 pw.write("客户端的信息来了"); pw.flush();//刷新缓冲向服务器发送信息 socket.shutdownOutput(); //接收服务器响应的消息 InputStream is = socket.getInputStream(); //得到字节流的对象 InputStreamReader isr = new InputStreamReader(is,"utf-8");//包字节流转换成字符流 BufferedReader br = new BufferedReader(isr);//构建缓冲区 String info = null; while ((info=br.readLine())!=null) { //输出服务端接收的数据 System.out.println(info); } socket.shutdownInput(); //关闭资源 br.close(); isr.close(); is.close(); pw.close(); os.close(); socket.close(); } catch (UnknownHostException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
/** * 服务器端 * * @author Administrator * */ public class Server { public static void main(String[] args) { try { ServerSocket serverSocket = new ServerSocket(6666);// 给端口号 System.out.println("服务器开始监听了啊"); //给的一个提示 Socket socket = null; int count = 0; while (true) { //每个客户端给一个新线程 socket = serverSocket.accept();// 阻塞监听客户端消息,得到连接对象 ServerThread st = new ServerThread(socket); //未设置线程优先级可能会导致运行时速度非常慢,可降低优先级 st.setPriority(4);//设置线程优先级,范围【1,10】默认为5 st.start(); InetAddress ia = socket.getInetAddress(); count++; System.out.println("第"+count+"个客户端"); System.out.println("IP地址"+ia.getHostAddress()); } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
/* * 服务器端处理类 */ public class ServerThread extends Thread { public Socket socket; public ServerThread(Socket socket){ this.socket = socket; } @Override public void run() { InputStream is =null; InputStreamReader isr=null; BufferedReader br=null; OutputStream os = null; PrintWriter pw =null; try { //监听客户端消息,得到连接对象 is = socket.getInputStream();//获取到客户端输入的,字节流 isr = new InputStreamReader(is);//将字节流转换成字符流 br = new BufferedReader(isr); //读取数据进入缓冲区 String data =null; while((data=br.readLine())!=null){ //输出客户端接收的数据 System.out.println(data); } socket.shutdownInput(); os = socket.getOutputStream(); //获取输出流 pw = new PrintWriter(os); //包装成打印流 pw.write("服务器说:给你会消息了"); pw.flush(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); }finally{ try { //关闭资源 /*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) { // TODO Auto-generated catch block e.printStackTrace(); } } } }
相关文章推荐
- 基于TCP的项目学习历程(一)实现简单的socket请求。瞎扯的,不要评论。
- linux网络编程之用socket实现简单客户端和服务端的通信(基于TCP)
- linux网络编程之用socket实现简单客户端和服务端的通信(基于TCP)
- 基于tcp的c/s模型的一个简单的socket实现
- Java 基于TCP/IP 实现简单的 socket 通信
- java基于TCP的socket编程简单实现[代码实践过]
- 简单实现基于UDP的Socket多线程通信
- Java 基于TCP/IP 实现简单的 socket 通信
- 【简单Web服务器搭建】基于Socket实现的最简单的Web服务器【ASP.NET原理分析】
- 基于TCP和UDP的socket通信(C++实现)
- 基于socket---简单聊天室的实现
- ios实现基于socket tcp/ip的通讯
- 移动网络应用开发中,使用 HTTP 协议比起使用 socket 实现基于 TCP 的自定义协议有哪些优势?
- ios实现基于socket tcp/ip 的通讯
- C++ 简单的 Tcp 实现[socket] 客户端与客户端通信
- 基于C#的socket编程的TCP异步的实现代码
- TCP socket 简单实现
- 简单的基于Socket的TCP编程实例
- java分布式开发TCP/IP NIO无阻塞 Socket((基于消息方式实现系统间的通信) )(转)
- 实现采用客户/服务器通信模式,基于TCP网络通信协议的多客户端简单应用之案例分析