C# 套接字编程
在模拟c#中的lan messenger时,我使用环回地址只是为了检查代码的功能。但是在发送了一些消息后,我在使用end connect方法时收到一个套接字异常,然后在发送数据时收到一个套接字异常。这个例外背后有什么原因吗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
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
。您还可以进一步使用其他套接字异步方法。您也可以使用.Netsocket.Connect
方法它将阻止您的代码,直到连接。因此,您不需要使用ManualResetEvent
和调用WaitOne
。您还可以进一步使用其他套接字异步方法。我已进行了异步调用以接收消息。我已进行了异步调用以接收消息。一般提示:在异常处理程序中,将exception.Message字符串合并到显示内容中,一般提示:在异常处理程序中,将exception.Message字符串合并到显示内容中,因为它包含更具体的信息。