Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/319.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 套接字编程_C#_.net_Sockets - Fatal编程技术网

C# 套接字编程

C# 套接字编程,c#,.net,sockets,C#,.net,Sockets,在模拟c#中的lan messenger时,我使用环回地址只是为了检查代码的功能。但是在发送了一些消息后,我在使用end connect方法时收到一个套接字异常,然后在发送数据时收到一个套接字异常。这个例外背后有什么原因吗 private void button1_Click(object sender, EventArgs e) { HideCaret(this.textBox1.Handle); StringBuilder sb = new

在模拟c#中的lan messenger时,我使用环回地址只是为了检查代码的功能。但是在发送了一些消息后,我在使用end connect方法时收到一个套接字异常,然后在发送数据时收到一个套接字异常。这个例外背后有什么原因吗

    private void button1_Click(object sender, EventArgs e)
    {

        HideCaret(this.textBox1.Handle);
        StringBuilder sb = new StringBuilder(this.textBox1.Text);
        str = this.textBox2.Text;
        Socket newsock = new Socket(AddressFamily.InterNetwork,socketType.Stream,   ProtocolType.Tcp);
        IPEndPoint ip = new IPEndPoint(localaddress, 5555);
        newsock.BeginConnect(ip, new AsyncCallback(connected), newsock);
        if (str != "")
        {
            sb.AppendLine(this.textBox2.Text);
            this.textBox1.Text = sb.ToString();
            this.textBox2.Text = "\0";
            send = Encoding.ASCII.GetBytes(str);
            try
            {
                newsock.BeginSend(send, 0, send.Length, SocketFlags.None, new AsyncCallback(sent), newsock);
            }
            catch (ArgumentException)
            {
                MessageBox.Show("arguments incorrect in begin-send call", "Error", MessageBoxButtons.OK);
            }
            catch (SocketException)
            {
                MessageBox.Show("error in accessing socket while sending", "Error", MessageBoxButtons.OK);
            }
            catch (ObjectDisposedException)
            {
                MessageBox.Show("socket closed while sending", "Error", MessageBoxButtons.OK);
            }
            catch (Exception)
            {
                MessageBox.Show("error while sending", "Error", MessageBoxButtons.OK);
            }

        }                                 

    }

请帮助

是否有单独的线程读取套接字?如果没有,您的套接字缓冲区可能已满。

是否有单独的线程读取套接字?如果没有,您的套接字缓冲区可能已满。

这可能是因为您在发送数据之前没有等待套接字连接。您有两个选择:

  • 从连接的
    回调方法异步发送数据
  • 通过阻塞此线程同步发送数据,直到连接
  • 通过将要发送的数据和套接字组合到一个新类中,然后在对的调用中将其作为
    state
    传递,可以完成#1。然后将发送代码移动到回调方法

    您可以通过设置并在之后调用来完成#2。然后调用
    已连接的
    回调方法,然后在上调用。然后按照上面的步骤发送


    如果您了解您将遇到什么类型的
    SocketException
    ,您可能还会学到更多

    从MSDN文档中:

    如果您收到一个
    SocketException
    , 使用
    SocketException.ErrorCode
    属性以获取特定错误 代码。在你得到这个之后 代码,请参阅Windows套接字 版本2 API错误代码文档 在MSDN库中获取详细信息 错误的描述


    这可能是因为您在发送数据之前没有等待套接字连接。您有两个选择:

  • 从连接的
    回调方法异步发送数据
  • 通过阻塞此线程同步发送数据,直到连接
  • 通过将要发送的数据和套接字组合到一个新类中,然后在对的调用中将其作为
    state
    传递,可以完成#1。然后将发送代码移动到回调方法

    您可以通过设置并在之后调用来完成#2。然后调用
    已连接的
    回调方法,然后在上调用。然后按照上面的步骤发送


    如果您了解您将遇到什么类型的
    SocketException
    ,您可能还会学到更多

    从MSDN文档中:

    如果您收到一个
    SocketException
    , 使用
    SocketException.ErrorCode
    属性以获取特定错误 代码。在你得到这个之后 代码,请参阅Windows套接字 版本2 API错误代码文档 在MSDN库中获取详细信息 错误的描述


    您也可以使用.Net
    Socket.Connect方法,它将阻止您的代码,直到连接。因此,您不需要使用
    ManualResetEvent
    和调用
    WaitOne
    。您还可以进一步使用其他套接字异步方法。

    您也可以使用.Net
    socket.Connect
    方法它将阻止您的代码,直到连接。因此,您不需要使用
    ManualResetEvent
    和调用
    WaitOne
    。您还可以进一步使用其他套接字异步方法。

    我已进行了异步调用以接收消息。我已进行了异步调用以接收消息。一般提示:在异常处理程序中,将exception.Message字符串合并到显示内容中,一般提示:在异常处理程序中,将exception.Message字符串合并到显示内容中,因为它包含更具体的信息。