[英]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.