我是Socket编程的新手。我尝试编写C#聊天。每当我调用此函数时:
void starteServer()
{
try {
IPHostEntry ipHostInfo = Dns.Resolve(Dns.GetHostName());
IPAddress localIpAddress = ipHostInfo.AddressList[0];
IPEndPoint localendpoint = new IPEndPoint(localIpAddress, serverPort);
server.Bind(localendpoint);
server.Listen(10);
Recive(server);
lb_chat.Items.Add(response);
receiveDone.WaitOne();
}
catch (Exception e)
{
errorHandler(e);
}
}
我得到一个System.Net.SocketException与未连接的套接字的原因。我认为我在Recive(server)行中中断了。这是接收方法:
private static void Recive(Socket client)
{
try
{
StateObjeckt state = new StateObjeckt();
state.workSocket = client;
client.BeginReceive(state.buffer, 0, StateObjeckt.bufferSize, 0, new AsyncCallback(ReceiveCallback), state);
}
catch (Exception e)
{
errorHandler(e);
}
}
private static void ReceiveCallback(IAsyncResult ar)
{
StateObjeckt state = (StateObjeckt)ar.AsyncState;
Socket client = state.workSocket;
int bytesRead = client.EndReceive(ar);
if (bytesRead > 0)
{
state.sb.Append(Encoding.UTF8.GetString(state.buffer, 0, bytesRead));
client.BeginReceive(state.buffer, 0, StateObjeckt.bufferSize, 0, new AsyncCallback(ReceiveCallback), state);
}
else
{
if (state.sb.Length > 1)
{
response = state.sb.ToString();
}
receiveDone.Set();
}
}
希望有人可以向我解释此行为并帮助我解决它。
如果您需要其余的代码,请访问:
https://gist.github.com/chrishennig/ea4b5a974fc6f9aa2bb6
提前致谢
最佳答案
您的问题是您正试图从监听套接字读取数据,就像套接字正在接收数据一样。当您使用套接字Listen时,它仅用于调用Accept接受连接,然后读取和写入这些后续连接的套接字。因此,异常(exception)情况是告诉您您正在尝试从未连接任何位置的套接字读取数据,这是正确的,因为尚未接受任何套接字。
关于c# - 由于未连接Socket而导致System.Net.SocketException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25054273/