我编写了以下代码:
public static void BeginListen( int port )
{
IPAddress address = IPAddress.Any;
IPEndPoint endPoint = new IPEndPoint( address, port );
m_Socket = new Socket( AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp );
m_Socket.Bind( endPoint );
m_Socket.Listen( 8 );
m_Socket.BeginAccept( new AsyncCallback( Accept ), null );
}
private static void Accept( IAsyncResult result )
{
Socket client = m_Socket.EndAccept( result );
SocketData state = new SocketData( client, 32767 );
m_Socket.BeginReceive( state.Buffer, 0, state.Buffer.Length, SocketFlags.None,
new AsyncCallback( Receive ), state );
m_Socket.BeginAccept( new AsyncCallback( Accept ), null );
}
当客户端尝试连接时,Accept() 中的 BeginReceive 调用会抛出错误:
发送或接收数据的请求被禁止,因为套接字未连接并且(使用 sendto 调用在数据报套接字上发送时)未提供地址
这是什么原因造成的?我只是似乎无法放置它。
Thanks
你需要打电话BeginReceive
on the Socket
由返回EndAccept
(在你的情况下client
),而不是服务器Socket
(在你的情况下m_Socket
):
Socket client = m_Socket.EndAccept( result );
// ...
client.BeginAccept( new AsyncCallback( Accept ), null );
有一个例子显示了正确的用法MSDN.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)