套接字通信C#
发布时间:2020-12-15 21:25:55 所属栏目:百科 来源:网络整理
导读:我正在使用这个类从我的应用程序发送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 S
我正在使用这个类从我的应用程序发送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(' '); } 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)中未处理; 我在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 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |