不得不佩服计算机先驱的设计:
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. css3 translate属性

    translate(x,y)水平方向和垂直方向同时移动(也就是X轴和Y轴同时移动):translateX(x)仅水平方向移动(X轴移动):translateY(Y)仅垂直方向移动(Y轴移动)默认都是从 ...

  2. css--block formatting context

    block formatting context(块级格式化上下文) 如何产生BFC:当一个HTML元素满足下面条件的任何一点,都可以产生Block Formatting Context: float ...

  3. 初学java之大数处理

    import java.text.*; public class Gxjun { public static void main(String args[] ) { int n=123456789; ...

  4. IE5,IE6,IE7,IE8的css兼容性列表[转自MSDN]

    CSS 2.1:   IE 5.0 IE 5.5 IE 6.0 IE 7.0 IE8 Beta 1 IE8 Beta 2 IE 8.0 @charset No Yes Yes Yes Yes Yes ...

  5. tableviewcell边距和设置值不符

    解决方法: 将Table View Cell的Layout Margins由Default改为Explicit,然后修改上下左右的边距.

  6. NSException

    NSException是什么? 最熟悉的陌生人,这是我对NSException的概述,为什么这么说呢?其实很多开发者接触到NSException的频率非常频繁,但很多人都不知道什么是NSExcepti ...

  7. 无法启动T-SQL 调试

    问题详情 解决办法 1.要在服务器本机,不要远程 2.用实例名,不要用.或者local 3.以Windows身份验证的administrator或者sqlserver身份验证的sa登录

  8. soapUI快速入门(测试一个登录接口)

    1.打开soapUI. 2.新建一个项目,实例如下: 点击ok后在soapUI界面左侧会显示出此项目,如图: 2.创建测试用例: a.新建用例组,选择此项目右键,新建一个用例组,如下图: 用例组创建好 ...

  9. Eclipse创建第一个springWebMVC项目

    1.第一步:配置中央调度器(DispatcherServlet) 2.第二步:配置处理器(Controller) 3.第三步:在applicationContext.xml文件中注册控制器 注:记得头 ...

  10. 铁人系列 (1) uva 10385

    uva  10385 列出n-1个一元方程,对应成单峰函数,所以用三分求解即可. #include <cstdio> #include <cstring> #include & ...