簡體   English   中英

客戶端發出一些請求后,TCP服務器停止響應[Windows 10 Universal app,C#,XAML]

[英]TCP server stops responding after a few requests from client [Windows 10 Universal app, C#, XAML]

我嘗試制作一些UWP紙牌游戲來學習如何使用TCP,但是我的服務器在幾次連接后總是停止響應客戶端。

客戶端向服務器發送不同的消息,例如“ DrawCard;(卡名)”。 有趣的是,前30到40條消息始終可以毫無問題地到達服務器,但是某些類型的消息之后,服務器將停止接受任何新消息:例如,我可以畫任意數量的卡,但是當我玩時,服務器停止監聽。

我已經嘗試解決這個問題了幾個小時,所以希望有人能幫助我。

應用啟動時,將調用以下函數:

public async static Task StartListening()
    {
        Windows.Networking.Sockets.StreamSocketListener socketListener = new Windows.Networking.Sockets.StreamSocketListener();
            socketListener.ConnectionReceived += SocketListener_ConnectionReceived;

            await socketListener.BindServiceNameAsync("1337");

            //If I leave this line out, it doesn´t even start listening for connections. Any idea why?
            await System.Threading.Tasks.Task.Delay(500);
}

這是收到連接時觸發的事件:

public async static void SocketListener_ConnectionReceived(Windows.Networking.Sockets.StreamSocketListener sender,
Windows.Networking.Sockets.StreamSocketListenerConnectionReceivedEventArgs args)
    {
            Stream inStream = args.Socket.InputStream.AsStreamForRead();
            StreamReader reader = new StreamReader(inStream);
            string request = await reader.ReadLineAsync();

            HandleData(request);

            ////Send the line back to the remote client.
            Stream outStream = args.Socket.OutputStream.AsStreamForWrite();
            StreamWriter writer = new StreamWriter(outStream);
            await writer.WriteLineAsync(request);
    }

HandleData()的使用

await CoreApplication.MainView.CoreWindow.Dispatcher.RunAsync(CoreDispatcherPriority.Normal,
                    () =>
                    {
                         /...
                    });

編輯綁定到UI元素的一些ObservableCollections。

客戶端代碼為:

public async Task SendDataToServer(string data)
    {
        Windows.Networking.Sockets.StreamSocket socket = new Windows.Networking.Sockets.StreamSocket();

            Windows.Networking.HostName serverHost = new Windows.Networking.HostName(hostname);

            string serverPort = "1337";
            await socket.ConnectAsync(serverHost, serverPort);

            //Write data to the server.
            Stream streamOut = socket.OutputStream.AsStreamForWrite();
            StreamWriter writer = new StreamWriter(streamOut);
            await writer.WriteLineAsync(data);

            //Read data from the server.
            Stream streamIn = socket.InputStream.AsStreamForRead();
            StreamReader reader = new StreamReader(streamIn);
            string response = await reader.ReadLineAsync();
        }
    }

在我的測試方案中,客戶端應用程序在Windows Mobile手機上運行,​​服務器在我的PC上運行。 除了返回已接收的消息以確保正確接收消息外,PC不會將任何數據發送回客戶端。

非常感謝您提供的任何幫助。 我已經嘗試了所有可以在Internet上找到的東西,但是沒有找到對我有用的東西。

非常感謝@Jay Zuo-MSFT! 我查看了官方示例,發現我錯過了以下代碼行:

CoreApplication.Properties.Add("listener", socketListener);

根據MS示例,這“節省了套接字,因此后續步驟可以使用它”。 該應用程序現在可以正常運行。 非常感謝您的幫助,@ Rafael和@Jay Zuo-MSFT!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM