お世話になります。
C#にて、TCP/IP通信処理を行っております。
以下のような処理にて、一回の受信に、2つ電文がくっついて受信した場合、1電文づつ取得できずに、アプリケーションエラーとなります。
Socket.Receive を利用して、指定バイト数の受信は、保障されていると考えておりますが、
実は、指定バイト数以下でも受信することがありますでしょうか?
ご教授お願いいたします。
以下ソースです。
C#
1protected bool DataRecv(Socket client, out byte[] data) 2{ 3 int length = 0; 4 data = null; 5 6 if (client != null && client.Connected) 7 { 8 // ヘッダ部受信 9 int recvLength = client.Receive(_recvData, Telegrams.TelegramHeader.TELEGRAM_HEADER_SIZE, 0); 10 11 if (recvLength == 0) 12 { 13 // 0バイト受信(切断) 14 return false; 15 } 16 17 // データ部受信準備 18 // 受信電文からデータ部の長さを取得する 19 int dataLength = (int)(((_recvData[15] << Telegrams.TelegramHeader.TELEGRAM_OCTET) & 0xff00) | _recvData[14]); 20 length = Telegrams.TelegramHeader.TELEGRAM_HEADER_SIZE + dataLength; 21 22 // 1電文の格納領域を確保 23 data = new byte[length]; 24 25 // ヘッダ部を作業領域にコピー 26 Array.Copy(_recvData, data, Telegrams.TelegramHeader.TELEGRAM_HEADER_SIZE); 27 28 // データ部受信 29 recvLength = client.Receive(_recvData, dataLength, 0); 30 31 32 return true; 33 } 34 }
コードが見づらくなっていますので、Markdown記法でシンタックスハイライトしていただけると助かります。
回答2件
あなたの回答
tips
プレビュー