C# 控制台程序 Socket 简单使用
参考
- 豆包
- https://www.cnblogs.com/cuihongyu3503319/p/9232275.html
- https://learn.microsoft.com/zh-cn/dotnet/api/system.threading.thread?view=net-9.0#definition
- https://learn.microsoft.com/zh-cn/dotnet/api/system.threading?view=net-9.0
- https://blog.csdn.net/weixin_44295783/article/details/117464768
- https://www.cnblogs.com/Kirito-Asuna-Yoyi/p/Close_Task.html
- https://q.cnblogs.com/q/142340
- https://learn.microsoft.com/zh-cn/dotnet/api/system.net.sockets.socket.disconnect?view=net-9.0#system-net-sockets-socket-disconnect(system-boolean)
- https://learn.microsoft.com/zh-cn/dotnet/fundamentals/networking/sockets/socket-services
- https://learn.microsoft.com/zh-cn/dotnet/api/system.net.sockets.tcpclient?view=net-9.0
- https://blog.csdn.net/m0_59293490/article/details/144872081
- https://blog.csdn.net/ba_wang_mao/article/details/107392724
- https://learn.microsoft.com/zh-cn/dotnet/api/system.collections.concurrent.concurrentbag-1?view=net-9.0
环境
| 软件/系统 | 版本 | 说明 |
|---|---|---|
| Windows | windows 10 专业版 22H2 64 位操作系统, 基于 x64 的处理器 | |
| git命令行工具 | 2.47.1.windows.1 | |
| Visual Studio Code | 1.100.2 | |
| .NET Framework | 9.0 |
代码
Socket 没有提供如监听断开连接等事件方法。
- SERVER
using System.Collections.Concurrent; using System.Net; using System.Net.Sockets; using System.Text; IPAddress iP = IPAddress.Parse("127.0.0.1"); IPEndPoint ipEndPoint = new IPEndPoint(iP, 2300); using Socket listener = new( ipEndPoint.AddressFamily, SocketType.Stream, ProtocolType.Tcp); listener.Bind(ipEndPoint); listener.Listen(100); // 客户端列表 ConcurrentBag<Socket> clients = new(); // while (true) { var client = listener.Accept(); clients.Add(client); Console.WriteLine("Socket server accepted client."); Thread thread = new(() => { while (true) { try { // 接受消息 var buffer = new byte[1024]; var received = client.Receive(buffer, SocketFlags.None); var response = Encoding.UTF8.GetString(buffer, 0, received); Console.WriteLine(response); // 循环发送给 其他客户端 foreach (var i in clients) { // 排除自己 if (i == client) { continue; } // 发送消息 buffer = Encoding.UTF8.GetBytes(response); i.Send(buffer, SocketFlags.None); } } catch (Exception e) { // 移除指定客户端(如果不移除,下次连接时会导致发送一条消息后就自动下线) clients.TryTake(out Socket? client); // 打印异常信息 Console.WriteLine(e.StackTrace); // 接触线程 break; } } }); thread.Start(); } - CLIENT
using System.Net; using System.Net.Sockets; using System.Text; IPAddress iP = IPAddress.Parse("127.0.0.1"); IPEndPoint ipEndPoint = new IPEndPoint(iP, 2300); using Socket client = new( ipEndPoint.AddressFamily, SocketType.Stream, ProtocolType.Tcp); client.Connect(ipEndPoint); // // 监听服务端的消息 Thread thread = new(() => { while (true) { try { // 接受消息 var buffer = new byte[1024]; var received = client.Receive(buffer, SocketFlags.None); var response = Encoding.UTF8.GetString(buffer, 0, received); Console.WriteLine(response); } catch (Exception e) { Console.WriteLine(e.Message); break; } } }); thread.Start(); // 客户端发送消息 while (true) { var message = Console.ReadLine(); if (message == null) { continue; } // Console.WriteLine(message); var messageBytes = Encoding.UTF8.GetBytes(message); var code = client.Send(messageBytes, SocketFlags.None); Console.WriteLine("code: "+code); } // client.Shutdown(SocketShutdown.Both);
博 主 :夏秋初
地 址 :https://www.cnblogs.com/xiaqiuchu/p/18909338
如果对你有帮助,可以点一下 推荐 或者 关注 吗?会让我的分享变得更有动力~
转载时请带上原文链接,谢谢。
地 址 :https://www.cnblogs.com/xiaqiuchu/p/18909338
如果对你有帮助,可以点一下 推荐 或者 关注 吗?会让我的分享变得更有动力~
转载时请带上原文链接,谢谢。

浙公网安备 33010602011771号