簡體   English   中英

c#從BeginConnect獲取遠程套接字

[英]c# Get remote socket from BeginConnect

我編寫的一些雙向套接字代碼遇到了麻煩。 我正在連接到這樣的服務器:

_clientSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
_clientSocket.BeginConnect(new IPEndPoint(IPAddress.Parse("100.100.100.1"), 8677), new AsyncCallback(ConnectCallback), null);
_buffer = new byte[_clientSocket.ReceiveBufferSize];

然后在回調中,我這樣做:

private void ConnectCallback(IAsyncResult AR)
{
    _clientSocket.EndConnect(AR);

    byte[] buffer = Encoding.ASCII.GetBytes("CONNECT");
    _clientSocket.BeginSend(buffer, 0, buffer.Length, SocketFlags.None, new AsyncCallback(SendCallback), null);
}

我還需要從服務器接收數據,但是我不清楚在此過程中如何獲取服務器的套接字。 我編寫了一些BeginReceive邏輯,但是始終出現錯誤,因為我使用了錯誤的套接字。

似乎在我上面的代碼中的某個地方,我應該能夠像在服務器的BeginAccept回調代碼中那樣獲得套接字:

_serverSocket.BeginAccept(new AsyncCallback(AcceptCallback), _serverSocket);

然后在AcceptCallback中:

Socket server = (Socket)AR.AsyncState;
Socket client = server.EndAccept(AR);

對我來說似乎很明顯,我只是想走一個步驟或概念而無法通過。 我已經進行了無數次搜索,但是要么搜索錯誤的東西,要么就不在那兒。

不,您實際上不需要服務器端套接字。 您應該使用客戶端套接字。 連接完成后,可以調用_clientSocket.BeginReceive() 例如,在ConnectCallback方法中,就像對BeginSend所做的那樣。 如果您對此感到異常,請添加您正在使用的確切代碼以及您所獲得的異常。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM