我正在使用这个类从我的应用程序发送Echo测试
public class SocketClient { Socket socket = null; static ManualResetEvent clientDone = new ManualResetEvent(false); const int TIMEOUT_MILLISECONDS = 5000; const int MAX_BUFFER_SIZE = 2048; public SocketClient() { socket = new Socket(AddressFamily.InterNetwork,SocketType.Dgram,ProtocolType.Udp); } public string Send(string serverName,int portNumber,string data) { string response = "Timeout"; if (socket != null) { socketasynceventargs socketEventArg = new socketasynceventargs(); socketEventArg.RemoteEndPoint = new DnsEndPoint(serverName,portNumber); socketEventArg.Completed += new EventHandler<socketasynceventargs>(delegate(object s,socketasynceventargs e) { response = e.socketError.ToString(); clientDone.Set(); }); byte[] payload = Encoding.UTF8.GetBytes(data); socketEventArg.SetBuffer(payload,payload.Length); clientDone.Reset(); socket.SendToAsync(socketEventArg); clientDone.WaitOne(TIMEOUT_MILLISECONDS); } else { response = "not initialized"; } return response; } public string Recieve(int portNumber) { string response = "Timeout"; if (socket != null) { socketasynceventargs socketEventArg = new socketasynceventargs(); socketEventArg.SetBuffer(new Byte[MAX_BUFFER_SIZE],MAX_BUFFER_SIZE); socketEventArg.Completed += new EventHandler<socketasynceventargs>(delegate(object s,socketasynceventargs e) { if (e.socketError == SocketError.Success) { response = Encoding.UTF8.GetString(e.Buffer,e.Offset,e.BytesTransferred); response.Trim('\0'); } else { response = e.socketError.ToString(); } clientDone.Set(); }); socketEventArg.RemoteEndPoint = new IPEndPoint(IPAddress.Any,portNumber); clientDone.Reset(); socket.ReceiveFromAsync(socketEventArg); clientDone.WaitOne(TIMEOUT_MILLISECONDS); } return response; } public void Close() { socket.Close(); } }
这是我如何使用它:
SocketClient client = new SocketClient(); client.Send("192.168.1.2",77,"besm ellah"); textBox1.Text=client.Recieve(77);
它总是通过Argument Exception在socket.SendToAsync(socketEventArg)中未处理;
“参数remoteEP不能是DnsEndPoint类型.”
“参数名称:remoteEP”
我在Windows功能上启用了简单TCP / IP的功能,但它也不起作用.
-UPDATE-
我尝试将代码更改为:
IPAddress[] localIPs = Dns.GetHostAddresses(Dns.GetHostName()); socketEventArg.RemoteEndPoint = new IPEndPoint(localIPs[3],portNumber);
它没有给出异常,但是消息没有通过.
解决方法
好吧,看起来您应该将其更改为不同类型的端点,而不是DNS端点.
我认为你应该使用IPEndPoint
http://msdn.microsoft.com/en-us/library/system.net.sockets.socketasynceventargs.aspx
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。