有個問題是 如果客戶端 同時送出訊息給我 會造成我伺服端 window from 當掉強制關閉
同時送出訊息給我 是要 兩個同時點擊 如果差一點點就不會當掉
(更新2022/10/24 08:30)
客戶端有兩台Android平板 使用自製的APP 用Xamrain開發的
如果這兩台客戶端平板 同時用聊天訊息傳給我(按下送出按鈕) 時
我電腦上的 window from就會跳出錯誤訊息並關閉
該如何解決這個問題呢??
可以使用訊息佇列的概念來處理客戶端 同時送出訊息的問題
這樣,當客戶端同時送出訊息時,所有的請求都會被先加入佇列,再依序處理。
using System;
using System.Net;
using System.Net.Sockets;
using System.Threading;
using System.Collections.Generic;
namespace Server
{
class Program
{
// 建立訊息佇列
static Queue<string> messageQueue = new Queue<string>();
static void Main(string[] args)
{
// 建立處理訊息佇列的執行緒
Thread messageQueueThread = new Thread(ProcessMessageQueue);
messageQueueThread.Start();
// 建立伺服器端的 Socket
IPEndPoint endPoint = new IPEndPoint(IPAddress.Any, 8080);
Socket serverSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
serverSocket.Bind(endPoint);
serverSocket.Listen(10);
Console.WriteLine("伺服器已啟動,等待客戶端連接...");
// 等待客戶端連接
Socket clientSocket = serverSocket.Accept();
Console.WriteLine("客戶端已連接");
// 接收客戶端訊息
while (true)
{
byte[] buffer = new byte[1024];
int received = clientSocket.Receive(buffer);
string receivedMessage = Encoding.UTF8.GetString(buffer, 0, received);
// 將收到的訊息加入訊息佇列
messageQueue.Enqueue(receivedMessage);
}
}
// 處理訊息佇列的方法
static void ProcessMessageQueue()
{
while (true)
{
// 取出並處理佇列中的第一個訊息
string message = messageQueue.Dequeue();
HandleMessage(message);
}
}
// 處理訊息的方法
static void HandleMessage(string message)
{
// 在這裡處理訊息
Console.WriteLine("收到訊息:" + message);
}
}
}