• 締切済み

ネットワークでの受信バイト数

Winsockを使用してデータの受信プログラムを作成していまが、以下の問題が出ています。 D/F/Hパソコンでテストを行うと1884バイトを一括で受信(GetData)できるのですが、HPパソコンで同じプログラムを動作させると1024バイトで分割されて受信されます。 バイト数は  Declare Function lstrlen Lib "kernel32" Alias "lstrlenA" (ByVal lpString As String) As Long で取得しています。 1.Winsockで最大何バイトまで受信できるのでしょうか? 2.上記HPパソコンでどこか設定があるのでしょうか? 以上。よろしくお願いします。

みんなの回答

  • takasebou
  • ベストアンサー率42% (61/144)
回答No.3

いちおう質問に回答すると。 1.特別に制限はないはずですが(かなり自信なし)、UDPですからM単位のデータをやりとりするには向きません。 2.MTUの値が違う可能性はあります。 ちなみにUDPは確か512バイトを1パケットとして送信するはずなので、HPのパソコンでは2パケットで分割されているのでしょう。 なおWinsockですが、使用しているのは Winsockコントロールでしょうか? それともAPIでしょうか? とりあえずWinsockコントロールという前提でお話しますが、どのような方法でデータの受信を行っていますでしょうか? lstrlenAを使われているということですから、恐らくこんな形なのではないかと思われます。 '電文を受け取る winsock.GetData acString, , bytesTotal これだと状況によってうまくいかないことがあります。 電文はバイト配列で受け取りましょう。 Dim abyteRecData() As Byte '受信データ Dim alByteNum As Long     '電文長 Dim acRecvMess As String    '電文内容 '電文を受け取る winsock.GetData abyteData, vbArray + vbByte, bytesTotal '受信データ長を取得 alByteNum = UBound(abyteRecData) '電文を変換する(バイト配列をVBの文字型(Unicode)にする) acRecvMess = StrConv(abyteRecData, vbUnicode) 'バイト配列をクリア Erase abyteRecData 以上の流れで組み込めば正常に受信出来るのではないかと思われます。 ……違ったらごめんなさい。

aioi_k
質問者

お礼

MTU値を最大にしても、プログラムをいじってもダメでした。 HPサポートセンターに問い合せても、これ以上(レジストリ操作)の質問は受け付けられないと蹴られてしまいました。 プログラムを1024バイトづつ2回に分けて取得するようにしました。 みなさんありがとうございました。

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.2

経由したルータで分割されることがあります。 多分、受信側で分割したのではないと思うのですが。

  • na_kirajp
  • ベストアンサー率43% (33/76)
回答No.1

MTUの値ですかね?

関連するQ&A