此处我向一个服务器发送任意的数据包,准备接受其返回的数据,但是试验说明能发送成功,但是为什么就接受不了数据呢?我用抓包程序也只看到了自己发送出去的数据,没有任何回送数据传回来。请在线的朋友帮忙看一下,解释一下,多谢了!                IPEndPoint ipep = new IPEndPoint(IPAddress.Any,1354);
        Socket sock= new Socket(AddressFamily.InterNetwork,SocketType.Dgram,ProtocolType.Udp);
        sock.Bind(ipep);
        MessageBox.Show("套接字连接成功!");
        IPEndPoint sendering=new IPEndPoint(IPAddress.Parse("202.115.64.146"),80);
        EndPoint remoteser=(EndPoint)(sendering);
        Byte[] sendbuf = new Byte[1024];
        string send = "get http/1.1";     //此处的数据可以是任意的
        sendbuf = Encoding.ASCII.GetBytes(send);
        int nbyte = 0;
        nbyte=sock.SendTo(sendbuf,sendbuf.Length,SocketFlags.None, remoteser);
        if (nbyte == -1)
        {
            MessageBox.Show("发送不成功");
            return;
        }
        else
        {
            MessageBox.Show("发送成功并开始接受数据");
        }
        Byte[] receive = new Byte[256];
        while (true)       
        {
            nbyte = sock.ReceiveFrom(receive, 256, SocketFlags.None, ref  remoteser);
            if (nbyte == -1)
            {
                MessageBox.Show("接受不到数据");
                break;
            }
            else
                MessageBox.Show("接受到数据包" + nbyte.ToString());
        }

解决方案 »

  1.   


    Byte[] receive = new Byte[256];
            while (true)       
            {
                nbyte = sock.ReceiveFrom(receive, 256, SocketFlags.None, ref  remoteser);
                if (nbyte == -1)
                {
                    MessageBox.Show("接受不到数据");
                    break;
                }
                else
                    MessageBox.Show("接受到数据包" + nbyte.ToString());
            }
    这段接受的代码单提出来。
    放到另一个方法里,通过线程来启动。
    一定要比发送的方法先启动。
    Thread processor;
    processor = new Thread(new ThreadStart(StartListening));
                processor.Start();
    private void StartListening()
            {
    Byte[] receive = new Byte[256];
            while (true)       
            {
                nbyte = sock.ReceiveFrom(receive, 256, SocketFlags.None, ref  remoteser);
                if (nbyte == -1)
                {
                    MessageBox.Show("接受不到数据");
                    break;
                }
                else
                    MessageBox.Show("接受到数据包" + nbyte.ToString());
            }
    }
      

  2.   

    string send = "get http/1.1";     //此处的数据可以是任意的 
    发送数据包。结尾最好加上 回车换行符号。因为大部分程序都是通过判断是否有此表示一段数据包的到达string send = "get http/1.1\r\n";     //此处的数据可以是任意的 
      

  3.   

    http://blog.csdn.net/lanwilliam/archive/2008/05/05/2390954.aspx
    希望能帮到你