c#从BeginConnect

时间:2016-01-20 15:34:55

标签: c# sockets asynchronous

我在写一些双向套接字代码时遇到了一些麻烦。我正在连接到这样的服务器:

_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);

我觉得很明显,我只是错过了让我超越这一步的步骤或概念。我做了无数的搜索,但要么我正在寻找错误的东西,要么就是不在那里。

1 个答案:

答案 0 :(得分:1)

不,你实际上不需要服务器端套接字。您应该使用您的客户端套接字。 连接完成后,您可以致电_clientSocket.BeginReceive()。例如,在ConnectCallback方法中,就像使用BeginSend一样。 如果您遇到异常,请添加您正在使用的确切代码以及您获得的例外情况。