此处我向一个服务器发送任意的数据包,准备接受其返回的数据,但是试验说明能发送成功,但是为什么就接受不了数据呢?我用抓包程序也只看到了自己发送出去的数据,没有任何回送数据传回来。请在线的朋友帮忙看一下,解释一下,多谢了! 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());
}
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());
}
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());
}
}
发送数据包。结尾最好加上 回车换行符号。因为大部分程序都是通过判断是否有此表示一段数据包的到达string send = "get http/1.1\r\n"; //此处的数据可以是任意的
希望能帮到你