为什么socket编程要用到多线程
不得不佩服计算机先驱的设计:
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编程要用到多线程的更多相关文章
- Java Socket编程 标准范例(多线程)
		链接地址:http://blog.csdn.net/benweizhu/article/details/6615542 服务器端(Server)非多线程 package com.zeph.server ... 
- socket编程演示样例(多线程)
		client代码例如以下: import java.io.*; import java.net.*; import java.util.Scanner; public class SimpleChat ... 
- 使用libevent进行多线程socket编程demo
		最近要对一个用libevent写的C/C++项目进行修改,要改成多线程的,故做了一些学习和研究. libevent是一个用C语言写的开源的一个库.它对socket编程里的epoll/select等功能 ... 
- Android应用开发提高篇(4)-----Socket编程(多线程、双向通信)
		链接地址:http://www.cnblogs.com/lknlfy/archive/2012/03/04/2379628.html 一.概述 关于Socket编程的基本方法在基础篇里已经讲过,今天把 ... 
- socket编程,简单多线程服务端测试程序
		socket编程,简单多线程服务端测试程序 前些天重温了MSDN关于socket编程的WSAStartup.WSACleanup.socket.closesocket.bind.listen.acce ... 
- 多线程Java Socket编程示例
		package org.merit.test.socket; import java.io.BufferedReader; import java.io.IOException; import jav ... 
- 多线程编程以及socket编程_Linux程序设计4chapter15
		看了Linux程序设计4中文版,学习了多线程编程和socket编程.本文的程序参考自Linux程序设计4的第15章. 设计了一个客户端程序,一个服务端程序.使用TCP协议进行数据传输. 客户端进程创建 ... 
- day08 多线程socket 编程,tcp粘包处理
		复习下socket 编程的步骤: 服务端: 1 声明socket 实例 server = socket.socket() #括号里不写 默认地址簇使用AF_INET 即 IPv4 ... 
- Qt中采用多线程实现Socket编程
		Socket通常也称作"套接字",应用程序通常通过"套接字"向网络发出请求或者应答网络请求. 本文介绍的是Qt中采用多线程Socket编程,由于工作的需要,开始 ... 
随机推荐
- Nginx内置常用变量
			nginx用到的全局变量 $arg_PARAMETER #这个变量包含GET请求中,如果有变量PARAMETER时的值. $args #这个变量等于请求行中(GET请求)的参数,例如foo=123&a ... 
- 【CITE】C#入门学习-----简单画图程序
			版权声明:本文为博主原创文章,未经博主允许不得转载. 欢迎大家提出意见,一起讨论! 转载请标明是引用于 http://blog.csdn.net/chenyujing1234 通过本实例了解如何在窗体 ... 
- [Hadoop 周边] 浅谈大数据(hadoop)和移动开发(Android、IOS)开发前景【转】
			原文链接:http://www.d1net.com/bigdata/news/345893.html 先简单的做个自我介绍,我是云6期的,黑马相比其它培训机构的好偶就不在这里说,想比大家都比我清楚: ... 
- Android 反编译工具简介
			Android 反编译工具: 所需工具:1 apktool : 用于获取资源文件 2 dex2Jar : 用于将classes.dex转化成jar文件 2 jd-gui: 将jar文件转化成java文 ... 
- HDUOJ----2571(命运)(简单动态规划)
			命运 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submiss ... 
- javamail 学习及实例
			JavaMail,是Sun发布的用来处理email的API,提供给开发者处理电子邮件相关的编程接口.通过使用它可以方便地执行一些常用的邮件传输. 可以看下<java邮件开发详解>第四章和第 ... 
- PHP可变长函数方法介绍
			1.三个重要函数 func_num_args() 返回实参个数 func_get_arg(i) 返回某个实参的值 func_get_args() 以数组的形式返回实参 ... 
- K2工作流的使用
			K2的工作流作为工作流中的战斗机,被各大企业争相抢购着,当然我们公司也买了,用起来确实方便也的确很强大. 主要分两的模块: 一.K2.net 2003 Service Manager 以上是对配置用户 ... 
- iBatisSQL中prepend的问题
			是前向声明还是后向声明? 官方文档那个给出:“the overridable SQL part that will be prepended to the statement”.可见是前向声明. -- ... 
- js  获得每周周日到周一日期
			//得到每周的第一天(周日)function getFirstDateOfWeek(theDate){ var firstDateOfWeek; theDate.setDate(theDate.get ... 
