
基于C#的多线程与Socket指定IP通信(如即时消息应用)示例代码
5星
- 浏览量: 0
- 大小:None
- 文件类型:None
简介:
本示例代码展示了如何使用C#实现多线程和Socket编程进行特定IP地址之间的通信,适用于开发即时消息应用程序。
使用多线程和Socket指定IP地址进行一对一聊天的C#源代码示例如下:
首先需要创建一个客户端类来处理连接服务器、发送消息以及接收来自服务器的消息。
```csharp
using System;
using System.Net.Sockets;
using System.Text;
public class ChatClient : IDisposable
{
private TcpClient client = new TcpClient();
public void Connect(string serverIP, int port)
{
try
{
client.Connect(serverIP, port);
// 开启接收线程,用于监听服务器发送过来的消息。
var receiveThread = new System.Threading.Thread(ReceiveMessage);
receiveThread.Start();
Console.WriteLine(Connected to the chat server.);
}
catch (Exception ex)
{
Console.WriteLine($Failed to connect: {ex.Message});
}
}
private void ReceiveMessage()
{
while(true)
{
try
{
var stream = client.GetStream();
// 创建一个字节缓冲区来接收数据。
byte[] buffer = new byte[1024];
int bytesRead;
// 从流中读取数据,直到没有更多数据可读为止。
while ((bytesRead = stream.Read(buffer, 0, buffer.Length)) > 0)
{
var receivedData = Encoding.UTF8.GetString(buffer, 0, bytesRead);
Console.WriteLine($Received: {receivedData});
}
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
break;
}
}
}
public void SendMessage(string message)
{
try
{
var stream = client.GetStream();
byte[] dataToSend = Encoding.UTF8.GetBytes(message);
// 将消息发送到服务器。
stream.Write(dataToSend, 0, dataToSend.Length);
Console.WriteLine($Sent: {message});
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}
public void Dispose()
{
client.Close();
}
}
```
此外,还需要一个服务器类来处理客户端连接、接收消息以及向所有已连接的客户端广播消息。
```csharp
using System;
using System.Net.Sockets;
using System.Collections.Generic;
public class ChatServer : IDisposable
{
private TcpListener listener = null;
public void Start(int port)
{
try
{
listener = new TcpListener(System.Net.IPAddress.Any, port);
// 开始监听客户端连接请求。
listener.Start();
Console.WriteLine(Chat server started. Waiting for clients...);
while (true)
{
var client = listener.AcceptTcpClient();
// 创建一个新的线程来处理这个新连接的客户端。
new System.Threading.Thread(() => HandleConnection(client)).Start();
}
}
catch (Exception ex)
{
Console.WriteLine($Failed to start server: {ex.Message});
Dispose();
}
}
private void HandleConnection(TcpClient client)
{
try
{
var stream = client.GetStream();
while(true)
{
byte[] buffer = new byte[1024];
int bytesRead;
// 从客户端读取数据。
if ((bytesRead = stream.Read(buffer, 0, buffer.Length)) > 0)
{
var receivedData = Encoding.UTF8.GetString(buffer, 0, bytesRead);
Console.WriteLine($Received from client: {receivedData});
// 向所有已连接的客户端广播接收到的消息。
Broadcast(receivedData);
}
}
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
Dispose();
}
}
private void Broadcast(string message)
{
// 实现向所有在线用户发送消息的功能,这里省略具体的实现细节。
}
public void Dispose()
{
listener.Stop();
}
}
```
以上代码提供了一个基本的框架来创建一个简单的聊天服务器和客户端。在此基础上可以根据实际需求进行扩展与优化。
全部评论 (0)


