1
我剛開始學習套接字編程,現在我試圖從客戶端向服務器發送列表<>。如何使用Tcp NetworkStream發送和接收列表C#
我讀過我需要使用BinaryFormatter進行序列化和反序列化,但我只是沒有知道如何使用NetworkStream將其發送到服務器。
請幫助和任何解釋將非常感激。先進的非常感謝。
下面是我的客戶端代碼
private void btnSendDataToServer_Click(object sender, EventArgs e)
{
int noOfMessage = Convert.ToInt32(tbMessageNo.Text);
try
{
serverStream = clientSocket.GetStream();
for (int i = 0; i < noOfMessage; i++)
{
clientList.Add(tbSendDataToServer.Text);
}
//send data to server
byte[] outStream = System.Text.Encoding.ASCII.GetBytes(?);
serverStream.Write(outStream, 0, outStream.Length);
serverStream.Flush();
//receive data from server
byte[] inStream = new byte[102400];
serverStream.Read(inStream, 0, (int)clientSocket.ReceiveBufferSize);
string returndata = System.Text.Encoding.ASCII.GetString(inStream);
msg("Data from Server : " + returndata);
}
catch(SocketException ex)
{ }
}
下面是我的服務器
byte[] bytesFrom = new byte[102400];
NetworkStream networkStream = clientSocket.GetStream();
networkStream.Read(bytesFrom, 0, (int)clientSocket.ReceiveBufferSize);
dataFromClient = System.Text.Encoding.ASCII.GetString(bytesFrom);
f.testQS.Enqueue(dataFromClient);
AppendText(f.testQS.Count().ToString() + " >> " + "From client-" + ClientNo + "--" + dataFromClient);
//send data to client
rCount = Convert.ToString(requestCount);
serverResponse = "Server to Client(" + ClientNo + ") " + rCount;
sendBytes = Encoding.ASCII.GetBytes(serverResponse);
networkStream.Write(sendBytes, 0, sendBytes.Length);
networkStream.Flush();
附:代碼如果它是一個單一的字符串,我沒有問題。但我想基於用戶noOfMessage循環第一個字符串,並將其放入List中。然後我將發送列表到服務器。然後,服務器將讀取收到的列表並顯示列表的數據。謝謝。
相反Encoding.ASCII.GetBytes的'()接收',發送由串行器返回的字節數組。你也犯了忽略'Read()'返回的字節數的經典錯誤。你需要一個消息框架協議。你爲什麼使用這樣的套接字? – CodeCaster
@CodeCaster我做了很多錯事嗎? var bin = new BinaryFormatter(); bin.Serialize(serverStream,clientList);這是正確的使用Serialize()?我該如何繼續? –