我有用于向服務器發送訊息的功能。服務器回傳字串,如“true”或“false”,客戶端回傳服務器回傳的值。我的問題是當我用我的請求呼叫 ClientReturn 時,我在函式中得到了回傳,但沒有進入另一個函式字串,或者 if(ClientReturn() == "false / true") 它是空的
public static string ClientReturn(string ip, int port, string message)
{
string toReturn = "";
BackgroundWorker worker = new BackgroundWorker();
worker.DoWork = delegate (object s, DoWorkEventArgs args)
{
//---data to send to the server---
string textToSend = message;
//---create a TCPClient object at the IP and port no.---
TcpClient client = new TcpClient(ip, port);
NetworkStream nwStream = client.GetStream();
byte[] bytesToSend = ASCIIEncoding.ASCII.GetBytes(textToSend);
//---send the text---
Console.WriteLine("Sending : " textToSend);
nwStream.Write(bytesToSend, 0, bytesToSend.Length);
//---read back the text---
byte[] bytesToRead = new byte[client.ReceiveBufferSize];
int bytesRead = nwStream.Read(bytesToRead, 0, client.ReceiveBufferSize);
toReturn = Encoding.ASCII.GetString(bytesToRead, 0, bytesRead);
Console.WriteLine("Returned: " toReturn); //It's the return of the server
client.Close();
};
worker.RunWorkerAsync();
return toReturn; //Return the value but not work it's return nothing
}
uj5u.com熱心網友回復:
問題是您沒有等待BackgroundWorker完成。
說實話,BackgroundWorker反正已經過時了。而是使用async和await。
您還缺少using處理客戶端和流的塊。
public static string ClientReturn(string ip, int port, string textToSend)
{
//---create a TCPClient object at the IP and port no.---
using (TcpClient client = new TcpClient())
{
await client.ConnectAsync(ip, port);
using (NetworkStream nwStream = client.GetStream())
{
byte[] bytesToSend = Encoding.ASCII.GetBytes(textToSend);
//---send the text---
Console.WriteLine("Sending : " textToSend);
await nwStream.WriteAsync(bytesToSend, 0, bytesToSend.Length);
//---read back the text---
byte[] bytesToRead = new byte[client.ReceiveBufferSize];
int bytesRead = await nwStream.ReadAsync(bytesToRead, 0, client.ReceiveBufferSize);
var toReturn = Encoding.ASCII.GetString(bytesToRead, 0, bytesRead);
Console.WriteLine("Returned: " toReturn); //It's the return of the server
return toReturn; //Return the value but not work it's return nothing
};
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/482428.html
標籤:C#
