socket通信(C#)

举报
红目香薰 发表于 2022/01/22 01:06:19 2022/01/22
【摘要】  通信两端分别为客户端(Client)和服务器(Server): 统一编码格式:【Encoding.UTF8】 测试环境: 需要启动谁就将谁设为启动项:  (先启动Server,后启动Client)   服务器(Server): 1:建立一个Socket对像; 2:用socket对像...

 通信两端分别为客户端(Client)和服务器(Server):

统一编码格式:【Encoding.UTF8】

测试环境:

需要启动谁就将谁设为启动项: 

(先启动Server,后启动Client)

 

服务器(Server):

1:建立一个Socket对像;

2:用socket对像的Bind()方法绑定EndPoint;

3:用socket对像的Listen()方法开始监听;

4:接受到客户端的连接,用socket对像的Accept()方法创建新的socket对像用于和请求的客户端进行通信;

5:用新的socket对象接收(Receive)和发送(Send)消息。

服务器编码:


  
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Net;
  5. using System.Net.Sockets;
  6. using System.Text;
  7. using System.Threading.Tasks;
  8. namespace Socket_Server
  9. {
  10. class Program
  11. {
  12. static Socket ReceiveSocket;
  13. static void Main(string[] args)
  14. {
  15. int port = 8885;
  16. //侦听所有网络客户接口的客活动
  17. IPAddress ip = IPAddress.Any;
  18. //使用指定的地址簇协议、套接字类型和通信协议 <br> ReceiveSocket.SetSocketOption(SocketOptionLevel.Socket,SocketOptionName.ReuseAddress,true);
  19. //有关套接字设置
  20. ReceiveSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
  21. IPEndPoint endPoint = new IPEndPoint(ip, port);
  22. ReceiveSocket.Bind(new IPEndPoint(ip, port)); //绑定IP地址和端口号
  23. ReceiveSocket.Listen(10); //设定最多有10个排队连接请求
  24. Console.WriteLine("建立连接");
  25. Socket socket = ReceiveSocket.Accept();
  26. byte[] receive = new byte[1024];
  27. socket.Receive(receive);
  28. Console.WriteLine("接收到消息:" + Encoding.UTF8.GetString(receive));
  29. byte[] send = Encoding.UTF8.GetBytes("成功接收消息,并回发消息。");
  30. socket.Send(send);
  31. Console.WriteLine("发送消息为:" + Encoding.UTF8.GetString(send));
  32. }
  33. }
  34. }

启动Server等待客户端访问:需要安全权限,点击【允许访问即可】

客户端(Client):

1:建立一个Socket对像;

2:用socket对像的Connect()方法以上面建立的EndPoint对像做为参数,向服务器发出连接请求;

3:如果连接成功,就用socket对像的Send()方法向服务器发送信息;

4:用socket对像的Receive()方法接受服务器发来的信息 ;

5:通信结束后一定记得关闭socket;

客户端编码:


  
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Net;
  5. using System.Net.Sockets;
  6. using System.Text;
  7. using System.Threading.Tasks;
  8. namespace Socket_demo
  9. {
  10. class Program
  11. {
  12. static Socket ClientSocket;
  13. static void Main(string[] args)
  14. {
  15. string IP = "127.0.0.1";
  16. int port = 8885;
  17. //将IP地址字符串转换成IPAddress实例
  18. IPAddress ip = IPAddress.Parse(IP);
  19. //使用指定的地址簇协议、套接字类型和通信协议
  20. ClientSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
  21. // 用指定的ip和端口号初始化IPEndPoint实例
  22. IPEndPoint endPoint = new IPEndPoint(ip, port);
  23. ClientSocket.Connect(endPoint); //与远程主机建立连接
  24. Console.WriteLine("开始发送消息");
  25. //通信时实际发送的是字节数组,所以要将发送消息转换字节
  26. byte[] message = Encoding.UTF8.GetBytes("客户端链接127.0.0.1:8885服务器");
  27. ClientSocket.Send(message);
  28. Console.WriteLine("发送消息为:" + Encoding.UTF8.GetString(message));
  29. byte[] receive = new byte[1024];
  30. int length = ClientSocket.Receive(receive);//length 接收字节数组长度
  31. Console.WriteLine("接收消息为:" + Encoding.UTF8.GetString(receive));
  32. ClientSocket.Close();//关闭连接
  33. }
  34. }
  35. }

启动Client客户端,访问服务器:

 访问成功: 

 如果Server服务端未启动则为:

服务端Server接收到的消息:

创建socket线程

Thread t = new Thread(()=>{});

//将监听放在死循环内

while(true){undefined

        socket监听

}

//启动线程
t.Start();


  
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Net;
  5. using System.Net.Sockets;
  6. using System.Text;
  7. using System.Threading;
  8. using System.Threading.Tasks;
  9. namespace Socket_Server
  10. {
  11. class Program
  12. {
  13. static Socket ReceiveSocket;
  14. static void Main(string[] args)
  15. {
  16. //创建socket线程
  17. Thread t = new Thread(()=> {
  18. int port = 8885;
  19. //侦听所有网络客户接口的客活动
  20. IPAddress ip = IPAddress.Any;
  21. //使用指定的地址簇协议、套接字类型和通信协议 <br> ReceiveSocket.SetSocketOption(SocketOptionLevel.Socket,SocketOptionName.ReuseAddress,true);
  22. //有关套接字设置
  23. ReceiveSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
  24. IPEndPoint endPoint = new IPEndPoint(ip, port);
  25. ReceiveSocket.Bind(new IPEndPoint(ip, port)); //绑定IP地址和端口号
  26. ReceiveSocket.Listen(10); //设定最多有10个排队连接请求
  27. Console.WriteLine("建立连接");
  28. while (true)
  29. {
  30. Socket socket = ReceiveSocket.Accept();
  31. byte[] receive = new byte[1024];
  32. socket.Receive(receive);
  33. Console.WriteLine("接收到消息:" + Encoding.UTF8.GetString(receive));
  34. byte[] send = Encoding.UTF8.GetBytes("成功接收消息,并回发消息。");
  35. socket.Send(send);
  36. Console.WriteLine("发送消息为:" + Encoding.UTF8.GetString(send));
  37. }
  38. });
  39. //启动线程
  40. t.Start();
  41. }
  42. }
  43. }

启动服务器,服务器端可以无限次数的接收客户端信息了。

到这里,Socket的基础技能讲解就完毕了,可以通过这个技能在工作中主要会进行推送功能编码,【推送】是一个非常重要的功能,你手机里的各种推送广告、APP的各种消息推送、最最基础的QQ、微信的聊天功能都依赖于此项技术。后面会对【Web Socket】进行讲解,关注好,后面直接查看此【分类专栏】即可。

作业项目,通过此demo,自行搭建Winform项目,进行Socket服务器端,与Client客户端,进行信息交互。

可以分开两个机器,使用【ipconfig】查看各自的IP,使用【ping】命令测试网络是否通畅,设置好对应的端口号进行相互访问即可完成通信功能。

文章来源: laoshifu.blog.csdn.net,作者:红目香薰,版权归原作者所有,如需转载,请联系作者。

原文链接:laoshifu.blog.csdn.net/article/details/120498014

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。