我用socket对象往一个机器的某个端口发送数据,接收端代码报错,不知道是什么问题.下面是我的部分代码,请朋友们看看什么问题:
发送端:
private void SocketSent()
{
IPHostEntry lipa = Dns.Resolve(tbIP.Text);
IPEndPoint lep = new IPEndPoint(lipa.AddressList[0], int.Parse(tbPort.Text)); Socket s = new Socket(lep.Address.AddressFamily, SocketType.Dgram, ProtocolType.Udp);
 
string str = "This is a test data ";
byte[] msg;
int k = 1; try
{
while(isRun)
{
msg = Encoding.Default.GetBytes(str + k);
// Sends datagram to the IpEndPoint specified. This call blocks.
s.SendTo(msg, 0, msg.Length, SocketFlags.None, lep);

sbpCount.Text = k.ToString();
k++;
Thread.Sleep(2000);
}
}
catch(Exception ep)
{
MessageBox.Show("Exception : " + ep.ToString());
}
finally
{
s.Shutdown(SocketShutdown.Send);
s.Close();
}
}
接收端:
private void SocketReceive()
{
IPHostEntry lipa = Dns.Resolve(tbIP.Text);
IPEndPoint lep = new IPEndPoint(lipa.AddressList[0], int.Parse(tbPort.Text)); Socket s = new Socket(lep.Address.AddressFamily,SocketType.Dgram,ProtocolType.Udp);

byte[] buffer = new byte[1024]; try
{
while(isRun)
{
IPEndPoint sender = new IPEndPoint(IPAddress.Broadcast, 0);
EndPoint tempRemoteEP = (EndPoint)sender; s.ReceiveFrom(buffer, 0, buffer.Length, SocketFlags.None, ref tempRemoteEP);

string str = " I received the following message : " + Encoding.Default.GetString(buffer); Thread.Sleep(1000);
}
       
}
catch(Exception ep)
{
MessageBox.Show("Exception : " + ep.ToString());
}
finally
{
s.Shutdown(SocketShutdown.Receive);
s.Close();
}发送端运行正常,接收端执行s.ReceiveFrom(buffer, 0, buffer.Length, SocketFlags.None, ref tempRemoteEP)这一句的时候报错,报"提供了一个无效的参数。"的错误.

解决方案 »

  1.   

    你要搞清楚   TCP/IP  和 UDP 呀
    对于TCP
    连接得建立起来才能发送数据 (socket)
    因该建立一个TcpListener  监听一个端口 然后客户端请求 然后 服务器端建立 链接
     mySocket = myListener.AcceptSocket() ; 
    然后才能发数据
    即使是UDP 我感觉你这样逻辑上也有问题
      

  2.   

    迷糊 没搞过UDP
    http://www.pcvz.com/Program/Programs/CCC/CCCnetprogram/Program_98221.html
      

  3.   

    recv = ClientSocket.ReceiveFrom(data, ref tempRemoteEP);
    这样吧..你学的哪个我编译也是出错.没有找到原因..
      

  4.   

    ref tempRemoteEP改为ref sender看看