冲杯茶喝 2011-11-30 22:05
浏览 215
已采纳

java socket io 方面的基础问题

传统的Socket是阻塞的,这样的话服务器对每个Socket都需要建立一个线程来操作。
请问这句话如何理解,前半句怎么解释?
后半句跟前一句有何必然联系?

  • 写回答

2条回答 默认 最新

  • 飞猪it 2011-12-06 14:20
    关注

    “传统的Socket是阻塞的”
    意思是说:当服务器端执行到
    ServerSocket serverSocket = new ServerSocket(8888);
    Socket socket = serverSocket.accept();/*执行到这一句的时候,这一句下面
    的所有代码都不会执行,也就是说,此时阻塞了。意思就是说:服务器正在8888端口进行监听,如果没有客户端来请求,那么我就一直在这监听,直到客户端发送请求了,我才会执行下面的代码。那么什么时候客户端发送请求呢?*/

    当客户端执行
    Socket socket = new Socket("服务器地址",8888);//此时,就代表着客户端发送请求。

    那么这个时候,服务器端阻塞的下面的代码就可以顺利执行了。

    至于后半句:
    意思是说,一个socket相当于一条线路,在这一条线路上有两头,一头是客户端,一头是服务器端,所以通话的只有这两方,这两方就把当前的这一条线路(socket)占用了,其他的客户端要是想和服务器端通信,很显然,必须和服务器端再建立一条新的线路(socket),对不对?
    那么对于我们第一次建立的线路,在这条线路上保存着客户端和服务器端这两头的信息,如果要通信,我就要通过这一条线路(socket)来获得io,然后才能通信。
    对于第二条线路,他们要通信,就要在第二条线路建立相应的IO才可以。
    现在是两条线路了,我们都知道在正常模式下服务器端是单线程的,那么这两条线路是无法同时进行相应的IO操作的。但是如果要是把第一条线路(socket)用一个线程来操作,把第二条线路(socket)用另一个线程来操作。他们不就互不影响而且能同时运行了吗。

    所以:服务器对每个Socket都需要建立一个线程来操作
    如果还是不理解的话,我给你发一个小Demo
    邮箱:fatherican@sina.com

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥30 这是哪个作者做的宝宝起名网站
  • ¥60 版本过低apk如何修改可以兼容新的安卓系统
  • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题
  • ¥15 C#算法问题, 不知道怎么处理这个数据的转换
  • ¥15 YoloV5 第三方库的版本对照问题
  • ¥15 请完成下列相关问题!