• C#__简单使用TCP/UDP发送消息


     

            Socket(套接字、插口)
            TCP和UCP的区别:
            1、基于连接和无连接
            2、对系统资源的要求(TCP较多,UCP少)
            3、UDP程序结构简单
            4、流模式和数据报模式
            5、TCP保证数据正确性和数据先后顺序,UDP可能丢包,且不保证数据到达先后顺序 

     

    // 进行前先寻得本机IPv4地址

    win + R ——>cmd——>输入ipconfig

     

     // TCP类

    1. class TCP
    2. {
    3. // 服务器端套接字(指定的寻址方案的一个实例.IPv4,套接字类型.字节流,支持的协议.TCP)
    4. Socket tcpServer = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
    5. // 客户端套接字
    6. Socket tcpClient = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.IP);
    7. //Internet 协议 (IP) 地址(IP 地址的字节数组值)
    8. IPAddress ipAddress = new IPAddress(new byte[] { 192, 168, 77, 1 });
    9. public void TcpServer()
    10. {
    11. //IP + Port(端口) 地址和端口号,端口号由自己指定,用于链接
    12. IPEndPoint ipEndPoint = new IPEndPoint(ipAddress, 0001);
    13. tcpServer.Bind(ipEndPoint); /*将相关联 tcpServer 与本地终结点*/
    14. // 侦听tcpServer(挂起的连接队列的最大长度)
    15. tcpServer.Listen(20);
    16. Console.WriteLine("正在连接客户端……");
    17. // 新创建的连接
    18. Socket client = tcpServer.Accept();
    19. Console.WriteLine("一个客户端链接过来了");
    20. // 接收信息
    21. byte[] data = new byte[1024];
    22. // 将tcpServer数据的按字节存入接收缓冲区(接收到的数据的存储位置)
    23. int length = client.Receive(data);
    24. //字符编码.获取 UTF-8 格式的编码.将指定字节数组中的一个字节序列解码为一个字符串(包含要解码的字节序列的字节数组,第一个要解码的字节的索引,要解码的字节数)
    25. string message = Encoding.UTF8.GetString(data, 0, length);
    26. Console.WriteLine("接收到客户端的消息:" + message);
    27. // 发送消息,将指定字符串中的所有字符编码为一个字节序列
    28. client.Send(Encoding.UTF8.GetBytes("欢迎你的到来"));
    29. // 关闭Socket连接和释放所有关联资源
    30. client.Close();
    31. tcpServer.Close();
    32. }
    33. public void TcpClient()
    34. {
    35. //IP + Port(端口),与客户端一致,保证接收
    36. IPEndPoint ipEndPoint = new IPEndPoint(ipAddress, 0001);
    37. //建立与远程主机的连接(远程设备)
    38. tcpClient.Connect(ipEndPoint);
    39. Console.WriteLine("链接上了服务器端!");
    40. string message = "我上线了";
    41. tcpClient.Send(Encoding.UTF8.GetBytes(message));
    42. byte[] data = new byte[1024];
    43. int length = tcpClient.Receive(data);
    44. Console.WriteLine("接收到服务器的信号:" + Encoding.UTF8.GetString(data));
    45. tcpClient.Close();
    46. }
    47. }

    // UDP类

    1. class UDP
    2. {
    3. Socket udpServer = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
    4. Socket udpClient = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
    5. IPAddress ipAddress = new IPAddress(new byte[] { 192, 168, 77, 1 });
    6. public void UdpSer()
    7. {
    8. IPEndPoint ipEndPoint = new IPEndPoint(ipAddress, 1111);
    9. // udpServer连接节点ipEndPint
    10. udpServer.Bind(ipEndPoint);
    11. // 提供了一个指示服务器必须侦听的所有网络接口上的客户端活动的 IP 地址
    12. IPEndPoint ipep = new IPEndPoint(IPAddress.Any, 0);
    13. // 标识网络地址,abstrct类
    14. EndPoint ep = ipep;
    15. byte[] data = new byte[1024];
    16. // 接收到数据缓冲区,将存储终结点(数据的存储位置,引用传递(远程服务器))
    17. int length = udpServer.ReceiveFrom(data, ref ep);
    18. Console.WriteLine("接收到来着UDP客户端的数据:" + Encoding.UTF8.GetString(data, 0, length));
    19. udpServer.Close();
    20. }
    21. public void UdpCnt()
    22. {
    23. byte[] data = Encoding.UTF8.GetBytes("你好,udp客户端上线了");
    24. IPEndPoint ipEndPoint = new IPEndPoint(ipAddress, 1111);
    25. udpClient.SendTo(data, ipEndPoint);
    26. udpClient.Close();
    27. }
    28. }

    // 主程

    1. static void Main(string[] args)
    2. {
    3. // TCP
    4. TCP server = new TCP();
    5. Thread sr = new Thread(server.TcpServer);
    6. Thread ct = new Thread(server.TcpClient);
    7. sr.Start();
    8. ct.Start();
    9. Thread.Sleep(1000);
    10. sr.Abort();
    11. ct.Abort();
    12. // UDP
    13. UDP udp = new UDP();
    14. Thread sUdp = new Thread(udp.UdpSer);
    15. Thread cUdp = new Thread(udp.UdpCnt);
    16. sUdp.Start();
    17. cUdp.Start();
    18. Thread.Sleep(1000);
    19. cUdp.Abort();
    20. sUdp.Abort();
    21. }

    // 结果

    1. 正在连接客户端……
    2. 链接上了服务器端!
    3. 一个客户端链接过来了
    4. 接收到客户端的消息:我上线了
    5. 接收到服务器的信号:欢迎你的到来
    6. 接收到来着UDP客户端的数据:你好,udp客户端上线了
    7. 请按任意键继续. . .
  • 相关阅读:
    网络安全的「生意经」不好讲
    Redis 持久化
    Android中级——ListView和RecycleView解析
    Mybatis中拦截器的使用场景和技巧
    【Spring】Day16
    【Flink入门修炼】1-3 Flink WordCount 入门实现
    N位质数c++
    Excel导入导出,增删改查的实现
    ubuntu使用postfix和AWS-SES发送邮件
    端口配置错误,导致RabbitMq启动报错
  • 原文地址:https://blog.csdn.net/qq_57233919/article/details/133255874