首页 > 编程 > C# > 正文

C#中Socket通信用法实例详解

2019-10-29 21:38:19
字体:
来源:转载
供稿:网友

这篇文章主要介绍了C#中Socket通信用法,以实例形式较为详细的分析了UDP及TCP两种通信方式的具体实现技巧,具有一定参考借鉴价值,需要的朋友可以参考下

本文实例讲述了C#中Socket通信用法。分享给大家供大家参考。具体如下:

一、UDP方式:

服务器端代码:

 

 
  1. static void Main(string[] args) 
  2. int recv; 
  3. byte[] data = new byte[1024]; 
  4. IPEndPoint ipep = new IPEndPoint(IPAddress.Any, 9050);//定义一网络端点 
  5. Socket newsock = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);//定义一个Socket 
  6. newsock.Bind(ipep);//Socket与本地的一个终结点相关联 
  7. Console.WriteLine("Waiting for a client.."); 
  8. IPEndPoint sender = new IPEndPoint(IPAddress.Any, 0);//定义要发送的计算机的地址 
  9. EndPoint Remote = (EndPoint)(sender);// 
  10. recv = newsock.ReceiveFrom(data, ref Remote);//接受数据  
  11. Console.WriteLine("Message received from{0}:", Remote.ToString()); 
  12. Console.WriteLine(Encoding.ASCII.GetString(data, 0, recv)); 
  13. string welcome = "Welcome to my test server!"
  14. data = Encoding.ASCII.GetBytes(welcome); 
  15. newsock.SendTo(data, data.Length, SocketFlags.None, Remote); 
  16. while (true
  17. data = new byte[1024]; 
  18. recv = newsock.ReceiveFrom(data, ref Remote); 
  19. Console.WriteLine(Encoding.ASCII.GetString(data, 0, recv)); 
  20. newsock.SendTo(data, recv, SocketFlags.None, Remote); 

客户端代码:

 

 
  1. void MainInfo() 
  2. byte[] data = new byte[1024];//定义一个数组用来做数据的缓冲区 
  3. string input, stringData; 
  4. IPEndPoint ipep = new IPEndPoint(IPAddress.Parse("192.168.1.21"), 9050); 
  5. Socket server = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp); 
  6. string welcome = "Hello,are you there?"
  7. data = Encoding.ASCII.GetBytes(welcome); 
  8. server.SendTo(data, data.Length, SocketFlags.None, ipep);//将数据发送到指定的终结点 
  9. IPEndPoint sender = new IPEndPoint(IPAddress.Any, 0); 
  10. EndPoint Remote = (EndPoint)sender; 
  11. data = new byte[1024]; 
  12. int recv = server.ReceiveFrom(data, ref Remote);//接受来自服务器的数据 
  13. Console.WriteLine("Message received from{0}:", Remote.ToString()); 
  14. Console.WriteLine(Encoding.ASCII.GetString(data, 0, recv)); 
  15. while (true)//读取数据 
  16. input = richTextBox1.Text;//从键盘读取数据 
  17. if (input == "text")//结束标记 
  18. break
  19. server.SendTo(Encoding.ASCII.GetBytes(input), Remote);//将数据发送到指定的终结点Remote 
  20. data = new byte[1024]; 
  21. recv = server.ReceiveFrom(data, ref Remote);//从Remote接受数据 
  22. stringData = Encoding.ASCII.GetString(data, 0, recv); 
  23. Console.WriteLine(stringData); 
  24. Console.WriteLine("Stopping client"); 
  25. server.Close(); 

二、TCP方式:

服务器端代码:

 

 
  1. Socket serverSocket = null
  2. Thread clientThread = null
  3. Socket clientSocket = null
  4. Thread thread = null
  5. IPAddress ips = null
  6. PEndPoint ipep = null
  7. void ServerStart() 
  8. ips = Dns.GetHostAddresses(Dns.GetHostName())[0]; 
  9. //创建IPEndPoint实例  
  10. ipep = new IPEndPoint(ips, 9050); 
  11. //创建一个套接字  
  12. serverSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); 
  13. serverSocket.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, true); 
  14. //将所创建的套接字与IPEndPoint绑定  
  15. serverSocket.Bind(ipep); 
  16. //设置套接字为收听模式  
  17. serverSocket.Listen(20); 
  18. while (listenalive) 
  19. try 
  20. //在套接字上接收接入的连接  
  21. clientSocket = serverSocket.Accept(); 
  22. clientThread = new Thread(new ParameterizedThreadStart(ReceiveData)); 
  23. clientThread.Start(clientSocket); 
  24. catch (Exception ex) 
  25. WriteErrorLog(ex.Message); 
  26. serverSocket.Close(); 
  27. serverSocket = null
  28. static void ReceiveData(object obj) 
  29. bool keepalive = true
  30. Socket s = obj as Socket; 
  31. Byte[] buffer = new Byte[1024]; 
  32. //根据收听到的客户端套接字向客户端发送信息  
  33. IPEndPoint clientep = (IPEndPoint)s.RemoteEndPoint; 
  34. Console.WriteLine("客户端ip:" + clientep.Address + " 端口:" + clientep.Port); 
  35. string welcome = "连接服务器成功"
  36. buffer = System.Text.Encoding.Unicode.GetBytes(welcome); 
  37. //向客户端发送“连接服务器成功”消息 
  38. s.Send(buffer, buffer.Length, SocketFlags.None); 
  39. buffer = new Byte[1024]; 
  40. int bufLen = 0; 
  41. string content = string.Empty; 
  42. while (true
  43. //在套接字上接收客户端发送的信息  
  44. bufLen = 0; 
  45. try 
  46. bufLen = s.Receive(buffer); 
  47. if (bufLen == 0) 
  48. break
  49. content += System.Text.Encoding.Unicode.GetString(buffer, 0, bufLen); 
  50. catch (Exception ex) 
  51. break; ; 
  52. Send(s, content); 
  53. s = null
  54. buffer = null
  55. clientep = null
  56. Thread.CurrentThread.Abort(); 

客户端代码:

 

 
  1. void Send(string content) 
  2. byte[] data = new byte[1024]; 
  3. newclient = new System.Net.Sockets.Socket(System.Net.Sockets.AddressFamily.InterNetwork, System.Net.Sockets.SocketType.Stream, System.Net.Sockets.ProtocolType.Tcp); 
  4. ie = new System.Net.IPEndPoint(System.Net.IPAddress.Parse(ipadd), port);//服务器的IP和端口 
  5. try 
  6. //因为客户端只是用来向特定的服务器发送信息,所以不需要绑定本机的IP和端口。不需要监听。 
  7. newclient.Connect(ie); 
  8. catch (System.Net.Sockets.SocketException e) 
  9. Console.WriteLine(e.ToString()); 
  10. return
  11. int recv = newclient.Receive(data); 
  12. //连接服务器成功 
  13. string stringdata = System.Text.Encoding.Unicode.GetString(data, 0, recv); 
  14. if (stringdata == "连接服务器成功"
  15. newclient.Send(System.Text.Encoding.Unicode.GetBytes(content)); 
  16. newclient.Shutdown(System.Net.Sockets.SocketShutdown.Send); 
  17. data = new byte[1024]; 
  18. recv = newclient.Receive(data); 
  19. string result = System.Text.Encoding.Unicode.GetString(data, 0, recv);  
  20. newclient.Shutdown(System.Net.Sockets.SocketShutdown.Receive); 
  21. newclient.Close(); 
  22. MessageBox.Show(result); 
  23. else 
  24. MessageBox.Show("连接服务器失败""友情提示"); 

希望本文所述对大家的C#程序设计有所帮助。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表