今天突然研究一下 java 网络编程
比如我有一个服务器在服务器上开了一个 55660端口 这个是个数据服务器 假设有5个客户端 每个客户端都需要传递数据,
并且每个都是要不停地传递数据, 那么 服务器可以用这一个 55660端口么就好像百度的服务器 每个人都访问80端口 那么多的人访问 80端口是不是在并发访问呢但是好像端口是不能被重复使用的 看了一天有点乱 哪位大侠给讲解一下 谢谢
比如我有一个服务器在服务器上开了一个 55660端口 这个是个数据服务器 假设有5个客户端 每个客户端都需要传递数据,
并且每个都是要不停地传递数据, 那么 服务器可以用这一个 55660端口么就好像百度的服务器 每个人都访问80端口 那么多的人访问 80端口是不是在并发访问呢但是好像端口是不能被重复使用的 看了一天有点乱 哪位大侠给讲解一下 谢谢
解决方案 »
- 为什么这个JS在firefox里面不显示呢,而在IE显示正常?如果谁能解决,重谢!
- web.xml
- struts2 在link的url中连接到jsp页面script可执行,而url中连接到action,再跳转到页面script错误!
- 大家讨论下 测试网站瓶颈有什么好的工具啊??我用loadrunner和jprofiler
- apache+tomcat集群问题?
- 请教Claros In Touch
- 用javaBean访问Access异常:NullPointerException!!!在线等解答
- hql语句怎样修改
- 请教编写的bean应放在哪里?
- (发言者有分)关于如何配合使用jsp,servlet, javabean 开发模式的问题
- Excel数据计算!!着急。。。
- myeclipse中各个位置设置的jdk有何区别和联系
建议楼主找个简易的Socket程序看一看就比较清楚了,这里有个例子介绍的挺不错,循序渐进的:
http://developer.51cto.com/art/200902/108179.htm
import java.io.*;
import java.net.*;
import java.util.*;public class EchoServer {
public static final int PORT = 10000; public static void main(String[] args) throws Exception {
ServerSocket serverSocket = new ServerSocket(PORT);
try {
while (true) {
System.out.println("服务端就绪,等待客户端连接"); // 侦听并接受到此套接字的连接。此方法在进行连接之前一直阻塞。
Socket socket = serverSocket.accept();
System.out.println("有客户端连接上来了,已建立Socket链接"); EchoServerWorker worker = new EchoServerWorker(socket);
System.out.println("启动工作线程");
new Thread(worker).start();
}
} finally {
serverSocket.close();
}
}
}class EchoServerWorker implements Runnable {
private Socket socket; // 工作线程所服务的目标Socket EchoServerWorker(Socket socket) {
this.socket = socket;
} public void run() {
try {
try {
// 准备输入输出端口
Scanner sc = new Scanner(socket.getInputStream());
OutputStreamWriter out = new OutputStreamWriter(socket.getOutputStream());
System.out.println("Socket for " + socket.getPort() + " started.");
// 读取信息并直接返回,这里按行读取(\n)
String str;
while ((str = sc.nextLine()) != null) {
System.out.println("【From Client】" + str);
out.write(str + "\n");
out.flush();
}
} finally {
socket.close();
System.out.println("Scoket for " + socket.getPort() + " closed.");
}
} catch (IOException ex) {
ex.printStackTrace();
}
}}
这不是什么保持这样的连接,处理完一个socket之后,就可以接着处理下一个了。
理论讲,只要ServerSocket不停的循环接收请求,就可以一直处理,有多少个都行。
限制主要两个:
1、线程数,传统IO模型,每条线程负责服务一个Socket;线程切换是有代价的,其次线程规模也是有限的,根据配置不同可以达到几千个,所以线程数限制了服务能力;当然这个可以问题可以用NIO来解决;
2、每个连接会消耗操作系统的一个句柄(handle),而操作系统的句柄数是有限的,当然也可以配置,几十万是问题不大的,百万以上要特殊配置了;看你有啥具体需要可以继续探讨。
http://hi.baidu.com/onlys_c/blog/item/bc6a25f8da6ddc01d9f9fd3b.htmlhttp://blog.csdn.net/chpdirector84/article/category/733164http://www.ha97.com/818.html
操作系统级别完成了。操作系统一般使用五元组(或四元组)来识别一个TCP会话,每个会话会被分配一个唯一的句柄(handler);Java这边处理其实很简单,直接按句柄区分就行了,其它的都是依赖操作系统能力。