C# Socket通信从入门到精通(5)——单个同步TCP服务器监听一个客户端C#代码实现(史上最全)

前言:

我们在开发TCP通信程序时,除了开发TCP客户端程序,有时候我们也需要开发TCP服务器程序,这在实际项目中是经常会遇到的,所以说掌握TCP服务器程序的开发是一项必备的技能,尤其在上位机软件开发领域,掌握TCP服务器程序的开发是走向高级工程师的必经之路,也是面试必考题目之一,本文就来介绍如何使用C#开发一个TCP服务器,从而实现与一个客户端的交互,实现数据的发送与接收(如需源码,订阅专栏后加入文章底部qq群获取),demo软件界面如下:
在这里插入图片描述

1、监听客户端连接

服务器如果想要实现与客户端的通信,必须要监听本地Ip地址与端口,比如有两台电脑,这两台电脑通过网线连接,并且两台电脑同属于一个网段,比如电脑A是服务器,A的IP地址是192.168.1.100,电脑B是客户端,B的IP地址是192.168.1.5,那么我们服务器程序需要监听的IP地址就是192.168.1.100。由于在本文中,我是使用同一台电脑进行测试,所以测试的IP是127.0.0.1,该地址称为本地回环地址,端口号我们可以设置为100,监听客户端的c#代码如下:

  private 
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
好的,下面是实现C# Socket聊天的基本步骤: 1. 创建服务器端程序,绑定IP和端口号,然后开始监听客户端连接请求。 2. 当有客户端连接服务器端时,服务器端创建一个新的线程,接收该客户端发送的消息。 3. 当服务器端接收到消息后,将消息转发给其他客户端。 4. 创建客户端程序,连接服务器端。 5. 当客户端连接服务器端后,可以发送消息给服务器端。 下面是代码实现服务器端: ```csharp using System; using System.Net; using System.Net.Sockets; using System.Text; using System.Threading; namespace Server { class Program { static void Main(string[] args) { StartServer(); } static void StartServer() { int port = 8888; IPAddress ip = IPAddress.Parse("127.0.0.1"); TcpListener listener = new TcpListener(ip, port); listener.Start(); Console.WriteLine("服务器已启动,等待客户端连接..."); while (true) { TcpClient client = listener.AcceptTcpClient(); Console.WriteLine("客户端连接"); Thread thread = new Thread(new ParameterizedThreadStart(ReceiveMessage)); thread.Start(client); } } static void ReceiveMessage(object obj) { TcpClient client = obj as TcpClient; NetworkStream stream = client.GetStream(); byte[] buffer = new byte[1024]; while (true) { int len = stream.Read(buffer, 0, buffer.Length); string message = Encoding.UTF8.GetString(buffer, 0, len); Console.WriteLine("接收到消息:" + message); SendMessage(message); } } static void SendMessage(string message) { byte[] buffer = Encoding.UTF8.GetBytes(message); for (int i = 0; i < ClientList.Count; i++) { TcpClient client = ClientList[i]; NetworkStream stream = client.GetStream(); stream.Write(buffer, 0, buffer.Length); } } static List<TcpClient> ClientList = new List<TcpClient>(); } } ``` 客户端: ```csharp using System; using System.Net; using System.Net.Sockets; using System.Text; using System.Threading; namespace Client { class Program { static void Main(string[] args) { StartClient(); } static void StartClient() { int port = 8888; IPAddress ip = IPAddress.Parse("127.0.0.1"); TcpClient client = new TcpClient(); client.Connect(ip, port); Console.WriteLine("连接服务器成功"); Thread thread = new Thread(new ThreadStart(ReceiveMessage)); thread.Start(); while (true) { string message = Console.ReadLine(); byte[] buffer = Encoding.UTF8.GetBytes(message); NetworkStream stream = client.GetStream(); stream.Write(buffer, 0, buffer.Length); } } static void ReceiveMessage() { TcpClient client = new TcpClient(); NetworkStream stream = client.GetStream(); byte[] buffer = new byte[1024]; while (true) { int len = stream.Read(buffer, 0, buffer.Length); string message = Encoding.UTF8.GetString(buffer, 0, len); Console.WriteLine("收到消息:" + message); } } } } ``` 在这个实现中,服务器端使用TcpListener监听客户端连接请求,当有客户端连接时,服务器端创建一个新的线程,接收该客户端发送的消息,并将消息转发给其他客户端客户端连接服务器端后,可以发送消息给服务器端,并接收来自服务器端的消息。 需要注意的是,这个实现只能实现简单的聊天,如果需要支持多个客户端之间的私聊、群聊等功能,还需要进一步完善代码

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

c#上位机

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值