如果一个异步服务器socket. beginaccept()为每个客户端套接字分配一个新端口启动一个新线程,我的客户端套
本文关键字:一个 客户端 新线程 启动 新端口 我的 线程 socket 服务器 异步 beginaccept | 更新日期: 2023-09-27 18:05:06
我正在阅读这个microsoft异步服务器服务器套接字示例http://msdn.microsoft.com/en-gb/library/fx6588te.aspx?cs-save-lang=1&cs-lang=csharp#code-snippet-1
// Bind the listener socket object to the local endpoint and
// listen for incoming connections.
try {
listener.Bind(localEndPoint);
listener.Listen(100);
while (true) {
// Set the event to nonsignaled state.
allDone.Reset(); //allDone is a ManualResetEvent
// Start an asynchronous socket to listen for connections.
Console.WriteLine("Waiting for a connection...");
listener.BeginAccept(
new AsyncCallback(AcceptCallback),
listener );
// Wait until a connection is made before continuing.
allDone.WaitOne();
}
问题1:
当新的客户端套接字加入我的服务器套接字时,服务器为每个客户端启动一个新线程,并且每个服务器线程都有自己的端口号据我所知。如果是这样,我的新客户端如何知道连接到哪个端口?服务器的IP地址是相同的,但端口必须为每个新客户端更改。然而微软代码在他们各自的异步客户端示例(在上面页面的底部)中没有这样的事情
问题2:
如果我不使用最后一行呢?allDone.WaitOne ();当创建新线程监听新客户端时,它会创建一个疯狂的无限循环吗?
谢谢你的时间,如果你能在回答中详细说明一下,我将非常感激,因为同样的事情用不同的语言说两遍真的很好。
创建新连接的事实对您的客户端是透明的-他们只需在调用Connect时获得连接。