2016-01-20 42 views
0

我在写一些双向套接字代码时遇到了一些麻烦。我连接到服务器这样的:c#从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); 

对我来说,我似乎很明显,我只是错过了一个步骤或概念让我过去。我做了无数次的搜索,但无论是寻找错误的东西,还是只是不在那里。

回答

1

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

+0

我将添加代码和错误 – ESDictor

+0

你是100%正确的。我看到的错误实际上来自服务器,而不是客户端(带有使客户端看起来像客户端的复制/粘贴错误)..我将把它标记为答案,因为你所说的是100%正确的。 – ESDictor