1
以下のコードは、Socketを使用してデータを受信しています。ソケットでデータを受信する際の未知のバイトサイズの扱い
ここで問題となるのは、バイトサイズを期待された量に初期化する必要があります。それ以外の場合、期待どおりの結果が得られません。
try
{
byte[] byt = new byte[256]; // Byte size should be intialize as expected
clientSocket.ReceiveTimeout = 10000;
clientSocket.Receive(byt);
String msg = Encoding.UTF8.GetString(byt);
Console.WriteLine("Message" + msg);
}catch (SocketException e){
if (e.SocketErrorCode == SocketError.TimedOut){
Console.WriteLine("SocketException: Timeout");
}else{
Console.WriteLine("SocketException: " + e.ToString());
}
}catch (Exception e){
Console.WriteLine("Exception: " + e.ToString());
}
したがって、データの受信時に不明なサイズのバイトを処理するにはどうすればよいですか?
データの受信をいつ停止するのか分かりますか?ストリームの最後まで読もうとしていますか? 「それはテキストデータの終わりです」というデリミタがありますか?私たちは実際にプロトコルについて知る必要があります... –
ClientSocket.Receiveはintを返します - あなたが受け取ったデータの量を知っていますか? – BugFinder
@ JonSkeet - 実際には、表示するデリミタはありません。これは、可能であればテキストデータの最後です。サーバが "こんにちは"と言う場合、文字列ベースの最後を追加せずに正確な "hello"を受信したいとしましょう。 –