UDPでデータを小出しにするには

解決


おこじょ番町  2003-06-09 08:27:41  No: 78190

WinsockコントロールでプロトコルをUDPにして、バイト配列に入れておいたデータを少しずつ区切って送信したいのですが、考えてみるともともとバイト配列についてよくわかりません。そのために、バイト配列へのデータの格納の仕方と、それを小出しにして送信する方法を教えていただきたいと思います。または、そういった事をあつかっているサイトを教えていただけるとありがたいです。


おーなー  2003-06-09 13:42:16  No: 78191

基本的に、送信側が小出しに送っても、
受信側は受信命令がでるまで
データをバッファにせっせとためこんでいきます

受信側が受け取り方に依存します(というより受信側で指定できます)んで、
(たとえば、今バッファにあるのを全部受け取るとか1byteずつうけとるとか)
あまり小出しにしても仕方が無いかもしれませんよ?

それはさておき、以下のような感じになります。
Byte配列を分割するなら、もうひとつ配列を用意して
普通に分解するしかないと思います。

Formにwinsock2つとTextbox1つとボタン1つ配置してください

Private Sub Command1_Click()
Dim arrByte() As Byte
arrByte = "abcdefg"
Winsock1.SendData arrByte
ReDim arrByte(0 To 50)
For i = 1 To 50
    arrByte(i - 1) = CByte(i)
Next
Winsock1.SendData arrByte

End Sub

Private Sub Form_Load()
Winsock1.RemoteHost = "windom-x80"
Winsock1.RemotePort = 7000
Winsock1.Bind 6000
Winsock2.RemoteHost = "windom-x80"
Winsock2.RemotePort = 6000
Winsock2.Bind 7000
Text1.Text = ""
End Sub

Private Sub Winsock2_DataArrival(ByVal bytesTotal As Long)
Dim arrByte() As Byte
Call Winsock2.GetData(arrByte, vbByte)

For i = 0 To UBound(arrByte) - 1
    Text1.Text = Text1.Text & Right("0" & Hex(CLng(arrByte(i))), 2) & " "
Next

End Sub


おーなー  2003-06-09 13:43:12  No: 78192

あ、コンピューター名は自分のに変えてくださいね。


岡田 之仁  2003-06-10 10:36:32  No: 78193

おこじょ番町殿に質問です。
ご質問に質問で返してしまうのですが・・・

何故UDPなのでしょか?
UDPの場合、パケットが先方についたかどうか、解らない仕組み
のものです。要はパケットが行方不明になっても再送要求が来ない
プロトコルです。
それでもデータ送受信の信頼性が無いUDPを使わないといけない
のでしょうか?
以上。


おーなー  2003-06-10 14:56:41  No: 78194

書き忘れ2
UDPプロトコルにしてください

>何故UDPなのでしょか?
横槍になりますけど、
チャットみたいのだとUDPの方がいいですよね。
どっちがサーバーかとか無いようなものには。
損失よりもリアルタイムを求める場合にも。
winsockの習作にもUDPは簡単でいいかもしれませんね。

一方でファイル転送とかにはTCPですよね。
データ順序の問題もありますし。
エラーもOS側でいたれりつくせりですし。

ケースバイケースですよね。
TCPの方が利用機会は圧倒的に多いですけど。


おこじょ番町  2003-06-11 13:36:25  No: 78195

回答ありがとうございました。
>何故UDPなのでしょか?
ちょっと動作の比較を行わなくてはならない事情がありまして・・・
私もその必要がなければ、普通にTCPだけですましていましたね。


おこじょ番町  2003-06-11 13:36:50  No: 78196

解決!!


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加