`

Java Socket实战之二:多线程通信

 
阅读更多

Java Socket实战之二:多线程通信

上一篇文章说到怎样写一个最简单的Java Socket通信,但是在上一篇文章中的例子有一个问题就是Server只能接受一个Client请求,当第一个Client连接后就占据了这个位置,后续Client不能再继续连接,所以需要做些改动,当Server没接受到一个Client连接请求之后,都把处理流程放到一个独立的线程里去运行,然后等待下一个Client连接请求,这样就不会阻塞Server端接收请求了。每个独立运行的程序在使用完Socket对象之后要将其关闭。

具体代码如下:

  1. packagecom.googlecode.garbagecan.test.socket.sample2;
  2. importjava.io.BufferedReader;
  3. importjava.io.IOException;
  4. importjava.io.InputStreamReader;
  5. importjava.io.PrintWriter;
  6. importjava.net.ServerSocket;
  7. importjava.net.Socket;
  8. publicclassMyServer{
  9. publicstaticvoidmain(String[]args)throwsIOException{
  10. ServerSocketserver=newServerSocket(10000);
  11. while(true){
  12. Socketsocket=server.accept();
  13. invoke(socket);
  14. }
  15. }
  16. privatestaticvoidinvoke(finalSocketclient)throwsIOException{
  17. newThread(newRunnable(){
  18. publicvoidrun(){
  19. BufferedReaderin=null;
  20. PrintWriterout=null;
  21. try{
  22. in=newBufferedReader(newInputStreamReader(client.getInputStream()));
  23. out=newPrintWriter(client.getOutputStream());
  24. while(true){
  25. Stringmsg=in.readLine();
  26. System.out.println(msg);
  27. out.println("Serverreceived"+msg);
  28. out.flush();
  29. if(msg.equals("bye")){
  30. break;
  31. }
  32. }
  33. }catch(IOExceptionex){
  34. ex.printStackTrace();
  35. }finally{
  36. try{
  37. in.close();
  38. }catch(Exceptione){}
  39. try{
  40. out.close();
  41. }catch(Exceptione){}
  42. try{
  43. client.close();
  44. }catch(Exceptione){}
  45. }
  46. }
  47. }).start();
  48. }
  49. }

下面是Client程序代码:

  1. packagecom.googlecode.garbagecan.test.socket.sample2;
  2. importjava.io.BufferedReader;
  3. importjava.io.InputStreamReader;
  4. importjava.io.PrintWriter;
  5. importjava.net.Socket;
  6. publicclassMyClient{
  7. publicstaticvoidmain(String[]args)throwsException{
  8. Socketsocket=newSocket("localhost",10000);
  9. BufferedReaderin=newBufferedReader(newInputStreamReader(socket.getInputStream()));
  10. PrintWriterout=newPrintWriter(socket.getOutputStream());
  11. BufferedReaderreader=newBufferedReader(newInputStreamReader(System.in));
  12. while(true){
  13. Stringmsg=reader.readLine();
  14. out.println(msg);
  15. out.flush();
  16. if(msg.equals("bye")){
  17. break;
  18. }
  19. System.out.println(in.readLine());
  20. }
  21. socket.close();
  22. }
  23. }

测试,首先运行MyServer类,然后运行两个MyClient类,然后分别在每个MyClient的提示符下输入字符串,就可以看到Server可以分别接收处理每个Client的请求了。

原文链接:http://blog.csdn.net/kongxx/article/details/7259465


分享到:
评论

相关推荐

    Java Socket实战之二 多线程通信 .

    NULL 博文链接:https://yangliuwillow.iteye.com/blog/1544038

    JAVA实战项目源码-计算机毕业设计java专业-项目源码-项目说明介绍-基于JAVA的网络通讯系统设计与实现(论文+系统)

    外加服务器端用于存放客户数据的数据库组成,本系统采用客户机/服务器架构模式,通过Java提供的Socket类来连接客户机和服务器并使客户机和服务器之间相互通信,由于聊天是多点对多点的,而Java提供的多线程功能,用...

    Java开发企业QQ内部通信系统程序完整练手项目流程实战_优秀案例实例源代码源码.zip

    ( Java Swing+ Derby+多线程+ Socket编程实现)。 近年来,随着中、小型企业的蓬勃发展,各种企业内部通信系统也在飞速发展着。由于企业内部通信系统可以不用链接 Internet,直接在局域网内实现信息通信、工作交流和计划...

    Java聊天室的设计与实现【尚学堂·百战程序员】

    同时,课程还涉及了多线程编程、Socket编程、GUI设计等技术,并使用了Swing等工具进行界面设计。 3. **课程内容**:课程内容涵盖了聊天室的整个开发流程,从需求分析、系统设计到代码实现和测试部署等环节。学员将...

    Java毕业设计-基于JAVA的网络通讯系统设计与实现(论文+系统).rar

    * 深入分析了Java网络编程的关键技术,如Socket通信、多线程处理等,并通过实例进行了验证。 * 全面介绍了系统的架构设计、功能模块划分以及数据库设计,展现了系统的高度模块化与可扩展性。 * 对系统的实现过程进行...

    Java典型模块

    第1篇 Java开发必备基础 第1章 搭建Java开发环境 1.1 Java的过去、现在和未来 1.1.1 Java的历史 ...第31章 俄罗斯方块游戏网络版(Swing+多线程+网络编程) 31.1 俄罗斯方块游戏项目原理 31.1.1 基本原理 ...

    Java开发技术大全 电子版

    第8章Java的多线程机制266 8.1线程的概念266 8.1.1多线程的特点266 8.1.2线程的状态267 8.2Thread类268 8.2.1Thread类的构造方法268 8.2.2Thread类的常用方法268 8.3多线程程序的编写269 8.3.1利用Thread的...

    《Android应用开发揭秘》源码

    精通Java、C、C++等语言,专注于移动通信软件开发,在机顶盒软件开发和MTK平台软件开发方面有非常深厚的积累。2007年获得中国软件行业协会游戏软件分会(CGIA)认证及国际游戏开发教育联合会国际认证。曾经领导和参与...

    Android应用开发揭秘

    杨丰盛,Android应用开发先驱,对Android有深入研究,实战经验极其丰富。精通Java、C、C++等语言,专注于移动通信软件开发,在机顶盒软件开发和MTK平台软件开发方面有非常深厚的积累。2007年获得中国软件行业协会...

    Android应用开发揭秘pdf高清版

    8.3 Socket通信 8.3.1 Socket基础 8.3.2 Socket应用(简易聊天室) 8.4 网络通信的中文乱码问题 8.5 WebKit应用 8.5.1 WebKjt概述 8.5.2 WebView浏览网页 8.5.3 WebView与Java 8.6 WtFi介绍 8.7 蓝牙 8.8 小结 第9章 ...

Global site tag (gtag.js) - Google Analytics