有個問題是 如果客戶端 同時送出訊息給我 會造成我伺服端 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);
        }
    }
}