C# socket服务器端和用户端连接好后怎么实现私聊功能
时间: 2024-05-15 08:14:29 浏览: 92
在实现私聊功能时,服务器端需要记录每个用户的连接信息和标识符,可以使用字典或列表来存储。当用户发送私聊消息时,服务器端需要提取出私聊对象的标识符,并将消息发送给该客户端。
以下是一个简单的示例代码:
```csharp
// 服务器端
Dictionary<string, Socket> clients = new Dictionary<string, Socket>(); // 存储客户端连接信息和标识符
// 处理客户端连接
void HandleClient(Socket client)
{
// 获取客户端标识符
string clientId = GetClientId(client);
// 添加客户端连接信息到字典
clients.Add(clientId, client);
// 接收客户端消息
while (true)
{
byte[] buffer = new byte[1024];
int length = client.Receive(buffer);
string message = Encoding.UTF8.GetString(buffer, 0, length);
// 判断是否为私聊消息
if (message.StartsWith("@"))
{
// 提取私聊对象的标识符
int spaceIndex = message.IndexOf(" ");
if (spaceIndex < 0) continue;
string targetId = message.Substring(1, spaceIndex - 1);
// 获取私聊对象的Socket
Socket targetClient;
if (clients.TryGetValue(targetId, out targetClient))
{
// 发送私聊消息给私聊对象
string privateMessage = string.Format("[私聊]{0}: {1}", clientId, message.Substring(spaceIndex + 1));
targetClient.Send(Encoding.UTF8.GetBytes(privateMessage));
}
}
else
{
// 广播消息给所有客户端
string broadcastMessage = string.Format("{0}: {1}", clientId, message);
Broadcast(broadcastMessage);
}
}
}
// 发送消息给所有客户端
void Broadcast(string message)
{
byte[] buffer = Encoding.UTF8.GetBytes(message);
foreach (Socket client in clients.Values)
{
client.Send(buffer);
}
}
// 获取客户端标识符
string GetClientId(Socket client)
{
return client.RemoteEndPoint.ToString();
}
```
在客户端,需要提供一个私聊功能的UI界面,当用户选择私聊时,需要输入私聊对象的标识符和消息内容,并将消息发送给服务器端。
```csharp
// 客户端
void SendPrivateMessage(string targetId, string message)
{
string privateMessage = string.Format("@{0} {1}", targetId, message);
byte[] buffer = Encoding.UTF8.GetBytes(privateMessage);
client.Send(buffer);
}
```
以上示例代码仅供参考,实际实现时需要根据具体需求进行适当修改。
阅读全文