出于某种原因,当客户端似乎至少连接到开放端口并向其发送数据包时,我的服务器显示为断开连接。
clientSocket = new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);
IPEndPoint ipEndPoint = new IPEndPoint(IPAddress.Any, Convert.ToInt32(PORT));
//Bind and listen
clientSocket.Bind(ipEndPoint);
clientSocket.Listen(5);
//Accept incoming
clientSocket.BeginAccept(new AsyncCallback(OnAccept), null);
之后这是我的OnAccept方法。
private void OnAccept(IAsyncResult ar)
{
try
{
clientSocket.EndAccept(ar);
if (clientSocket.Connected == true)
{
clientSocket.BeginReceive(byteData, 0, byteData.Length, SocketFlags.None, new AsyncCallback(OnReceive), clientSocket);
}
}
catch (Exception ex)
{
log.Log(ex.ToString(), 2);
}
}
我正在使用开箱即用的客户端连接(我正在使用的东西用于测试目的)然而当我开始连接以收听并点击" connect"在客户端上。客户转向"已连接"状态并开始发送数据包。然而," if(clientSocket.Connected == true)"语句总是失败,即使在它上面运行断点之后也不会出现时间问题。
任何帮助和想法将不胜感激。
答案 0 :(得分:0)
所以看来,当我使用异步并按照我的方式进行监听时,我必须在该套接字上接受一个新套接字。
Socket clientSocket2 = clientSocket.EndAccept(ar);
然后获取cliientSocket2上的连接。