c# - 由于未连接Socket而导致System.Net.SocketException

标签 c# sockets network-programming

我是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/

相关文章:

python - 如何统计 TCPServer 中已连接的客户端?

c# - 转换 Func<> 类型

c - 如何在混杂模式下打开原始 UDP 套接字?

c# - 我怎么在这里得到一个超出范围的异常?

c - 当 BSD 套接字报告已收到 RST 时,如果尚未读取所有内容

Python Socket(如何将文件名与文件内容分开)

linux - 是否可以修改接口(interface)索引

c# - 跟踪 TCP 上已连接客户端的最佳方法是什么?

c# - 计算两个值之间的百分比差异

c# - 如何将私钥导入 c# RSAParameters 对象?