优化消息显示和客户端连接处理

在 `MainWindow.xaml.cs` 中,调整了消息对齐逻辑,新增 `SenderColor` 属性以根据用户 ID 设置消息颜色。发送者为当前用户时,消息右对齐并显示蓝色;否则左对齐并显示黑色。

在 `Program.cs` 中,移除了对 HTTP 请求的处理逻辑,简化了客户端连接处理。同时,更新了日志记录,确保准确反映压缩数据的实际长度。
This commit is contained in:
绪山七寻 2025-06-22 01:41:42 +08:00
parent 015535c100
commit e01af0bcc2
2 changed files with 20 additions and 18 deletions

View File

@ -386,8 +386,11 @@ namespace chatclient
Content = msgItem.message ?? "(无内容)", Content = msgItem.message ?? "(无内容)",
Timestamp = msgItem.timestamp ?? DateTime.Now, Timestamp = msgItem.timestamp ?? DateTime.Now,
Alignment = msgItem.userid == UserId ? Alignment = msgItem.userid == UserId ?
HorizontalAlignment.Right : HorizontalAlignment.Right :
HorizontalAlignment.Left HorizontalAlignment.Left,
SenderColor = msgItem.userid == UserId ?
new SolidColorBrush(Colors.Blue) :
new SolidColorBrush(Colors.Black)
}; };
mainWindow.Messages.Insert(0, chatmessage); mainWindow.Messages.Insert(0, chatmessage);
}); });
@ -470,7 +473,7 @@ namespace chatclient
Buffer.BlockCopy(lengthPrefix, 0, fullMessage, 0, lengthPrefix.Length); Buffer.BlockCopy(lengthPrefix, 0, fullMessage, 0, lengthPrefix.Length);
Buffer.BlockCopy(compressedData, 0, fullMessage, lengthPrefix.Length, compressedData.Length); Buffer.BlockCopy(compressedData, 0, fullMessage, lengthPrefix.Length, compressedData.Length);
log.Info($"发送数据(长度:{data.Length},压缩后长度:{lengthPrefix.Length},总体长度:{fullMessage.Length})"); log.Info($"发送数据(长度:{data.Length},压缩后长度:{compressedData.Length},总体长度:{fullMessage.Length})");
Client?.Send(fullMessage); Client?.Send(fullMessage);
} }
private async void SendMessage_Click(object sender, RoutedEventArgs e) private async void SendMessage_Click(object sender, RoutedEventArgs e)

View File

@ -58,24 +58,23 @@ namespace chatserver
} }
static void HandleClient(Socket socket) static void HandleClient(Socket socket)
{ {
const int prefixSize = sizeof(int);
byte[] prefixBuffer = new byte[prefixSize];
int received = socket.Receive(prefixBuffer, 0, 4, SocketFlags.Peek);
if (received == 4)
{
string httpStart = Encoding.ASCII.GetString(prefixBuffer);
if (httpStart.StartsWith("GET") || httpStart.StartsWith("POST") ||
httpStart.StartsWith("HEAD") || httpStart.StartsWith("HTTP"))
{
log.Warn("检测到HTTP请求拒绝连接");
socket.Close();
return;
}
}
try try
{ {
while (true) while (true)
{ {
const int prefixSize = sizeof(int);
byte[] prefixBuffer = new byte[prefixSize];
int received = socket.Receive(prefixBuffer, 0, 4, SocketFlags.Peek);
if (received == 4)
{
string httpStart = Encoding.ASCII.GetString(prefixBuffer);
if (httpStart.StartsWith("GET") || httpStart.StartsWith("POST") ||
httpStart.StartsWith("HEAD") || httpStart.StartsWith("HTTP"))
{
log.Warn("检测到HTTP请求拒绝连接");
return;
}
}
//读取长度前缀 //读取长度前缀
int prefixBytesRead = 0; int prefixBytesRead = 0;
while (prefixBytesRead < prefixSize) while (prefixBytesRead < prefixSize)
@ -453,7 +452,7 @@ namespace chatserver
Buffer.BlockCopy(lengthPrefix, 0, fullMessage, 0, lengthPrefix.Length); Buffer.BlockCopy(lengthPrefix, 0, fullMessage, 0, lengthPrefix.Length);
Buffer.BlockCopy(compressedData, 0, fullMessage, lengthPrefix.Length, compressedData.Length); Buffer.BlockCopy(compressedData, 0, fullMessage, lengthPrefix.Length, compressedData.Length);
log.Info($"发送数据(长度:{data.Length},压缩后长度:{lengthPrefix.Length},总体长度:{fullMessage.Length})"); log.Info($"发送数据(长度:{data.Length},压缩后长度:{compressedData.Length},总体长度:{fullMessage.Length})");
socket.Send(fullMessage); socket.Send(fullMessage);
} }
/// <summary> /// <summary>