C#由于未连接套接字,因此不允许发送或接收数据的请求

时间:2014-07-09 15:19:18

标签: c# sockets

所以我试图发送一个数据包,但我一直收到这个错误

任何帮助都会很棒!

非常感谢!

错误讯息: 不允许发送或接收数据的请求,因为套接字未连接(当使用sendto调用在数据报套接字上发送时)没有提供地址

代码:

    private void button1_Click(object sender, EventArgs e)
    {
        byte[] packetData = Encoding.ASCII.GetBytes(textBox1.Text);

        const string ip = "75.126.77.26";
        const int port = 5588;


        var ep = new IPEndPoint(IPAddress.Parse(ip), port);


        var client = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
        client.SendTo(packetData, ep);
    }
}

}

3 个答案:

答案 0 :(得分:2)

  

var client = new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp)

这将创建一个将使用TCP的套接字(这是一个流协议)。如果要在面向连接的套接字上调用Socket.SendTo,则必须先通过调用Socket.Connect来连接它。

如果您打算仅发送数据报,则最好选择使用UDP,而不需要连接。

  

var client = new Socket(AddressFamily.InterNetwork,SocketType.Dgram,ProtocolType.Udp)

答案 1 :(得分:1)

private void button1_Click(object sender, EventArgs e)
{
    byte[] packetData = Encoding.ASCII.GetBytes(textBox1.Text);

    const string ip = "75.126.77.26";
    const int port = 5588;


    var ep = new IPEndPoint(IPAddress.Parse(ip), port);


    var client = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
    client.Connect(ep);
    client.SendTo(packetData, ep);
}

为清楚起见,添加了这一行:

    client.Connect(ep);

答案 2 :(得分:-2)

我认为您要求的是在致电client.Connect之前致电client.SendTo。您还需要在致电连接后致电client.Connected以确保您已连接。

此帮助页面提供了使用套接字对象的示例:http://msdn.microsoft.com/en-us/library/2b86d684%28v=vs.110%29.aspx

    // Connect to the host using its IPEndPoint.
    s.Connect(hostEndPoint);

    if (!s.Connected)
    {
      // Connection failed, try next IPaddress.
      strRetPage = "Unable to connect to host";
      s = null;
      continue;
    }