Socket编程实现:两个客户端和一个服务端的实时通信

其基本的原理设置为:客户端1和客户端2通过同时与服务端建立连接来实现数据的实时传输和记录,类似于微信的基础的聊天功能(但是很多方面肯定没有微信做的好,只是实现了微信聊天的非常小的一部分)

操作平台为:Umware虚拟机,操作系统Ubuntu

服务端相对比较固定

客户端需要使用两个线程分别用来接收发送的数据和接收的数据。

客户端代码:

这是其中一个客户端的代码,另一个客户端代码与其类似,只需要修改特定的名称就可以实现。

本人算是green hand

这些的实现都是在两个无私慷慨的名师的帮助下实现的,感谢老师的倾囊相授,也希望这些代码能对广大从事这方面工作的从业者有帮助

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在C#中实现点对点通信,一种常用的方式是使用Socket编程。通过Socket编程,可以实现客户端服务端之间的通信。 如果需要实现客户端既是服务端又是服务端的功能,可以使用双向Socket通信。在这种情况下,客户端同时具有发送和接收数据的能力,而服务端则负责接收客户端发送的数据并向客户端发送回复。 下面是一个简单的C#代码示例,实现一个双向Socket通信客户端服务端: ```csharp // 服务端代码 using System; using System.Net; using System.Net.Sockets; using System.Text; namespace Server { class Program { static void Main(string[] args) { // 创建一个监听Socket Socket listener = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); // 绑定监听端口 IPEndPoint localEP = new IPEndPoint(IPAddress.Any, 12345); listener.Bind(localEP); // 开始监听 listener.Listen(10); Console.WriteLine("Waiting for a connection..."); // 接收客户端连接请求 Socket handler = listener.Accept(); Console.WriteLine("Connected to client"); while (true) { // 接收客户端发送的数据 byte[] bytes = new byte[1024]; int bytesRec = handler.Receive(bytes); string data = Encoding.ASCII.GetString(bytes, 0, bytesRec); Console.WriteLine($"Received from client: {data}"); // 向客户端发送数据 byte[] msg = Encoding.ASCII.GetBytes("Hello from server"); handler.Send(msg); } // 关闭连接 handler.Shutdown(SocketShutdown.Both); handler.Close(); } } } // 客户端代码 using System; using System.Net; using System.Net.Sockets; using System.Text; namespace Client { class Program { static void Main(string[] args) { // 创建一个Socket连接到服务器 Socket client = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); IPEndPoint remoteEP = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 12345); client.Connect(remoteEP); Console.WriteLine("Connected to server"); while (true) { // 向服务器发送数据 string msg = "Hello from client"; byte[] bytes = Encoding.ASCII.GetBytes(msg); client.Send(bytes); // 接收服务器发送的数据 bytes = new byte[1024]; int bytesRec = client.Receive(bytes); string data = Encoding.ASCII.GetString(bytes, 0, bytesRec); Console.WriteLine($"Received from server: {data}"); } // 关闭连接 client.Shutdown(SocketShutdown.Both); client.Close(); } } } ``` 在这个例子中,客户端服务端分别运行在两个不同的进程中。客户端服务端都创建了一个Socket连接,并通过Connect和Accept方法建立连接。客户端服务端通过Send和Receive方法互相发送数据。 需要注意的是,在实际使用中,需要添加异常处理以及其他相关的代码来确保程序的稳定性和安全性。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值