多线程SocketTcp能挂多少个客户端。
如题,一般服务器配置,长连接客户端。 --------------------编程问答-------------------- UP --------------------编程问答-------------------- tcp/ip最大不是65535么? --------------------编程问答-------------------- 那应该看你主机的配置和网速吧。。。开放一个端口就可以很多客户端连上,不知是不是理解错误? --------------------编程问答-------------------- 开放一个端口就可以很多客户端连上,不知是不是理解错误?
-----------
绝对理解错误!
TCP连接独占套接字...一台主机能建立的最多连接数就是可用的最大套接字数...即IP数*65535...但由于系统运行时要使用一些套接字...实际上达不到这个数字... --------------------编程问答-------------------- 另外TCP服务要用一个监听套接字监听连接请求...还要减去一个... --------------------编程问答-------------------- TCP连接独占套接字...一台主机能建立的最多连接数就是可用的最大套接字数...即IP数*65535...但由于系统运行时要使用一些套接字...实际上达不到这个数字...
-------------------------
不知道你有没有写过服务器。。。晕死。。。
用过FTP没?用过TELNET没?
--------------------编程问答-------------------- 开放一个端口就可以很多客户端连上,不知是不是理解错误?
----------------------
不是错误...
如果一个端口只允许一个用户登陆,那其他用户怎么办?
至于能开多少个连接,完全靠TCP缓冲区。。。
一般能维护200多个长连接已经不错了 --------------------编程问答-------------------- 不知道你有没有写过服务器。。。晕死。。。
用过FTP没?用过TELNET没?
---------------
lz说的是“长连接客户端”...我说的是同时连接的最多连接数...如果你不理解建议去看看TCP原理... --------------------编程问答-------------------- up --------------------编程问答-------------------- 呵呵,自己看书去,FTP就是一个长连接客户端,Telnet也是,还有email。。。等等。
没写过程序就不要出来误人子弟。
--------------------编程问答-------------------- 如果你理解为能开几个端口。。。
那么还有种技术叫端口复用。
同样23端口,我可以bind N个(当然是理论上的) --------------------编程问答-------------------- 这问题太基础了...不想争辩...自己看书去... --------------------编程问答-------------------- 端口复用?呵呵...你得明白端口复用的基础原理...并且端口复用的安全性早已被诟病多日了... --------------------编程问答-------------------- 难道你认为在你机器不能同时运行两个FTP客户端?
--------------------编程问答-------------------- 难道你认为一个端口不能同时连N个客户端?
--------------------编程问答-------------------- 真不知道你5个裤衩怎么来的... --------------------编程问答-------------------- // Set the TcpListener on port 13000.
Int32 port = 13000;
IPAddress localAddr = IPAddress.Parse("127.0.0.1");
// TcpListener server = new TcpListener(port);
TcpListener server = new TcpListener(localAddr, port);
// Start listening for client requests.
server.Start();
// Buffer for reading data
Byte[] bytes = new Byte[256];
String data = null;
// Enter the listening loop.
while (true)
{
Console.Write("Waiting for a connection... ");
this.textBox1.AppendText("Waiting for a connection... \r\n");
// Perform a blocking call to accept requests.
// You could also user server.AcceptSocket() here.
TcpClient client = server.AcceptTcpClient();
Console.WriteLine("Connected!");
} --------------------编程问答-------------------- 一段最简单的服务器代码, 自己去连...不能连200个我把星星送你.
--------------------编程问答-------------------- 呵呵...搬出代码来想说明什么?
不跟你争了...我的错误是没有说清楚同时连接...
另外...我的项目里是不允许使用端口复用的... --------------------编程问答-------------------- 一段最简单的服务器代码, 自己去连...不能连200个我把星星送你.
------------
哈哈...那你送我吧...因为要保持这200个连接显然要用201个端口... --------------------编程问答-------------------- 受不了你了。。。我只用一个端口也能连200个客户端。
--------------------编程问答-------------------- 你见过哪个Ftp服务器开发N个端口了?
如果是专有服务器,一般只开放21一个端口。 --------------------编程问答-------------------- 哈哈...那你送我吧...因为要保持这200个连接显然要用201个端口...
-----------
这句算我没说...呵呵...
只是出于安全考虑...我一般都不用端口复用... --------------------编程问答-------------------- 端口复用只是对服务器的。。。客户端要什么复用?
--------------------编程问答-------------------- 另外TCP服务要用一个监听套接字监听连接请求...还要减去一个...
-------------
看到我这句了吗?
算了,我们的立场不同...不再讨论了... --------------------编程问答-------------------- 换句话说,对于web服务器,虽然它不是连接.但是在瞬间还是可以认为是长连接,只不过时间很短,立即释放了.
在很短的瞬间,同时存在1000个连接也是很正常的.如果发起DOS攻击,那么瞬间连接数远远大于65535...
你见过google服务器开65535个端口? --------------------编程问答-------------------- 不厚道的猜测,vrhero可能没有写过tcp server程序
或者写的server很小,以至于根本不需要考虑接受连接超过65535的情况
科普下,一个TCP连接由四个要素决定
本机IP 本机端口 远端IP 远端端口
本机IP 本机端口 相同 而 远端IP 远端端口 不同 则是不同的连接
so,服务端只需要开一个端口,理论上可以接受 2^32 * 65535个连接
当然有效的IP地址数目还是小于2^32的,懒得计算 --------------------编程问答-------------------- mark --------------------编程问答-------------------- mark
--------------------编程问答-------------------- kao ,同步的呀????????????65535吧! --------------------编程问答-------------------- 我测试过600长连接没问题……
超过这个就没继续测试了 --------------------编程问答-------------------- 开放一个端口就可以很多客户端连上,不知是不是理解错误?
-----------------
开放端口也就是开启了一个服务,它叫做被动(监听)socket句柄,相应的有主动(客户端用于连接服务器之用)socket句柄,它们“都”用于服务的初始化——创建数据socket句柄(真正通讯之用),一个数据socket句柄代表一个“客户/服务器”链路,看看《WINDOWS网络编程技术》之类的书籍。
据我所知telnet是应该是事务socket,不是常链接,它的服务特点应该是这样,但下载大量数据文件时可能会开启一个常链接,推测而已。
socket句柄的数量有平台句柄类型表示的最大值决定,但通常我们说的服务器所支持的最大链接数并非指的这个,我们主要关心的是怎么样分发和处理这些句柄上的IO事件。如果自己编写这写事件分发函数你可以决定这个数目(数目当然要权衡效率和空间之类的问题了),但这样做没什么意义,系统已经提供了很多这样的事件分发器(select,WSAAsycSelect……) ,当你使用这些事件分发器的时候就有了最大连接数的限制。
例如:select在windows平台下限制为64——数据socket句柄数(最大客户数)=64 - 被动socket句柄数。通过多线程在不同的线程函数中用select分发不同的socket句柄集来增加连接数它很复杂(关键字:多线程 select,搜索下),通常不推荐这么使用,select是线程相关的,其它大多的事件分发器也有类似问题。
完成端口是支持“任意”数目socket链接的很好的“多线程”socket IO模型,当然需要权衡平台复杂度和服务类型等等因素了。
不知道是否说清楚了多线程和链接数目的关系。
回答人家问题要认真点,知道就知道,不知道别猜,态度要端正啊^_^ --------------------编程问答-------------------- 一个端口是可以有多个连接的(socket中)
但是它是有一定的数量的(具体的我忘了)
补充:.NET技术 , C#