我不自稱是一個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客戶端的東西時看到過這段代碼。然而,這些調用的大多數示例代碼都等待着哪些強制您等待該函數超出範圍或返回某些內容,然後再繼續。 –