我不自称是一个C#或插座大师,但是从我了解你上面已经有了将接受第一个连接,然后没有更多的代码。您需要建立另一个BeginAccept。
喜欢的东西:除了异步连接
因此,通过使用异步
TcpListener listener = null;
ConnectionManager()
{
listener = new TcpListener(port);
listener.BeginAcceptSocket(new AsyncCallback(acceptConnection), listener);
}
public void acceptConnection(IAsyncResult ar)
{
// Create async receive data code..
// Get ready for a new connection
listener.BeginAcceptSocket(new AsyncCallback(acceptConnection), listener);
}
接收数据时,接受连接很快完成,并建立侦听新的连接。我想你也可以重新排序。
对于直插座连接(不的TcpListener),这是我用什么:
(connectedClient是我自己的类,它处理接收&发射功能,包含有关连接的其他信息)。
int Port = 7777; // or whatever port you want to listen on
IPEndPoint ipLocal = new IPEndPoint(IPAddress.Any, port);
listenSocket = new Socket(AddressFamily.InterNetwork,
SocketType.Stream, ProtocolType.Tcp);
listenSocket.Bind(ipLocal);
// create the call back for any client connections...
listenSocket.BeginAccept(new AsyncCallback(OnClientConnection), null);
private void OnClientConnection(IAsyncResult asyn)
{
if (socketClosed)
{
return;
}
try
{
Socket clientSocket = listenSocket.EndAccept(asyn);
ConnectedClient connectedClient = new ConnectedClient(clientSocket, this);
connectedClient.MessageReceived += OnMessageReceived;
connectedClient.Disconnected += OnDisconnection;
connectedClient.MessageSent += OnMessageSent;
connectedClient.StartListening();
// create the call back for any client connections...
listenSocket.BeginAccept(new AsyncCallback(OnClientConnection), null);
}
catch (ObjectDisposedException excpt)
{
// Deal with this, your code goes here
}
catch (Exception excpt)
{
// Deal with this, your code goes here
}
}
我希望这回答了您要找的内容?
我不认为推荐Async CTP是一个好主意,那只是预览代码。 – svick
@svick,它工作的很好,而且自SP1刷新以来,它有一个上线许可证,所以它不是“只是预览代码”。 – Soonts
我在Windows 8应用程序中实现HTTP客户端的东西时看到过这段代码。然而,这些调用的大多数示例代码都等待着哪些强制您等待该函数超出范围或返回某些内容,然后再继续。 –