不得不佩服计算机先驱的设计:
socket编程为什么需要多线程。如果只有一个ServerSocket线程,那么如下代码:

public void start() throws Exception {
ServerSocket serverSocket = new ServerSocket(8888);
System.out.println("socket服务器启动在端口8888");
while (true) {
Socket socket = serverSocket.accept();
System.out.println("接收到的socket是 :" + socket);
InputStream inputStream = socket.getInputStream();
String fileName = readFileName(inputStream);
System.out.println(fileName);
}
}
serverSocket.accept();会接收每一个连接上来的Socket吗?不一定,因为从运行效果上看,socket.getInputStream();
可能会阻塞,最简单的情况可能是客户端那里没有发送任何数据,这样的话,服务器端就会一直阻塞在这里。这时,如果有
新的客户端连接上来,服务器端也不可能有任何的处理了。

如果,把这三句代码注释了
InputStream inputStream = socket.getInputStream();
String fileName = readFileName(inputStream);
System.out.println(fileName);
,那么这个服务器端是能够处理每个客户端的连接了,不过,这也是一种最极端的情况了,因为服务器端什么事情也
没有做,只是简单地打印了每个连接上来的socket。

为什么socket编程要用到多线程的更多相关文章

  1. Java Socket编程 标准范例(多线程)

    链接地址:http://blog.csdn.net/benweizhu/article/details/6615542 服务器端(Server)非多线程 package com.zeph.server ...

  2. socket编程演示样例(多线程)

    client代码例如以下: import java.io.*; import java.net.*; import java.util.Scanner; public class SimpleChat ...

  3. 使用libevent进行多线程socket编程demo

    最近要对一个用libevent写的C/C++项目进行修改,要改成多线程的,故做了一些学习和研究. libevent是一个用C语言写的开源的一个库.它对socket编程里的epoll/select等功能 ...

  4. Android应用开发提高篇(4)-----Socket编程(多线程、双向通信)

    链接地址:http://www.cnblogs.com/lknlfy/archive/2012/03/04/2379628.html 一.概述 关于Socket编程的基本方法在基础篇里已经讲过,今天把 ...

  5. socket编程,简单多线程服务端测试程序

    socket编程,简单多线程服务端测试程序 前些天重温了MSDN关于socket编程的WSAStartup.WSACleanup.socket.closesocket.bind.listen.acce ...

  6. 多线程Java Socket编程示例

    package org.merit.test.socket; import java.io.BufferedReader; import java.io.IOException; import jav ...

  7. 多线程编程以及socket编程_Linux程序设计4chapter15

    看了Linux程序设计4中文版,学习了多线程编程和socket编程.本文的程序参考自Linux程序设计4的第15章. 设计了一个客户端程序,一个服务端程序.使用TCP协议进行数据传输. 客户端进程创建 ...

  8. day08 多线程socket 编程,tcp粘包处理

    复习下socket 编程的步骤: 服务端:   1 声明socket 实例 server = socket.socket()  #括号里不写  默认地址簇使用AF_INET  即 IPv4       ...

  9. Qt中采用多线程实现Socket编程

    Socket通常也称作"套接字",应用程序通常通过"套接字"向网络发出请求或者应答网络请求. 本文介绍的是Qt中采用多线程Socket编程,由于工作的需要,开始 ...

随机推荐

  1. C#基础:泛型委托

    泛型委托是委托的一种特殊形式,感觉看上去比较怪异,其实在使用的时候跟委托差不多,不过泛型委托更具有类型通用性. 就拿C#里最常见的委托EventHandler打比方.在.NET 2.0以前,也就是泛型 ...

  2. Leetcode--Add two number

    地址:https://leetcode.com/problems/add-two-numbers/ 代码: class Solution { public: ListNode* addTwoNumbe ...

  3. MVC设计模式(持续更新中)

    MVC设计模式--->英文全称为: model(模型)  View (视图)  Controller(控制)   MVC是一种设计思想.这种思想强调实现模型(Model).视图(View)和控制 ...

  4. jquery改变元素的值的函数text(),html(),val()

    text() - 设置或返回所选元素的文本内容 html() - 设置或返回所选元素的内容(包括 HTML 标记) val() - 设置或返回表单字段的值,适合于标签中有value属性的标签. 代码: ...

  5. sql取年月日

    Sql Server 中一个非常强大的日期格式化函数 Select CONVERT(varchar(100), GETDATE(), 0): 05 16 2006 10:57AM Select CON ...

  6. 转:Oracle中的rownum不能使用大于>的问题

    一.对rownum的说明 关于Oracle 的 rownum 问题,很多资料都说不支持SQL语句中的“>.>=.=.between...and”运算符,只能用如下运算符号“<.< ...

  7. hdu 4610 Cards

    http://acm.hdu.edu.cn/showproblem.php?pid=4610 先求出每个数的得分情况,分数和得分状态,(1<<4)种状态 按分数从大到小排序 然后每种状态取 ...

  8. 用ant进行编译和打包(java)

    ant是目前java环境下最好用的打包部署工具,其采用xml的格式进行编写,功能非常强大.现介绍一下如何手工使用ant进行java程序的编译打包.一.安装ant1.下载并安装ant.到官方主页http ...

  9. 【第53套模拟题】【递推】【RMQ】【二进制】【分块】

    题目:(开始自己描述题目了...) 第一题大意: 求1~n的所有排列中逆序对为k个的方案数,输出方案数%10000,n<=1000. 解:这道题一个递推,因为我基本上没怎么自己做过递推,所以推了 ...

  10. TADOTable 用过滤事件 后 记录数据和 记录的内容

    用 过滤事件,过滤后 ADOTbTrade.RecordCount 是总数, 但是,记录内容是 过滤后的 ADOTbTrade.First; while not ADOTbTrade.Eof do b ...