WinsockコントロールでプロトコルをUDPにして、バイト配列に入れておいたデータを少しずつ区切って送信したいのですが、考えてみるともともとバイト配列についてよくわかりません。そのために、バイト配列へのデータの格納の仕方と、それを小出しにして送信する方法を教えていただきたいと思います。または、そういった事をあつかっているサイトを教えていただけるとありがたいです。
基本的に、送信側が小出しに送っても、
受信側は受信命令がでるまで
データをバッファにせっせとためこんでいきます
受信側が受け取り方に依存します(というより受信側で指定できます)んで、
(たとえば、今バッファにあるのを全部受け取るとか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
あ、コンピューター名は自分のに変えてくださいね。
おこじょ番町殿に質問です。
ご質問に質問で返してしまうのですが・・・
何故UDPなのでしょか?
UDPの場合、パケットが先方についたかどうか、解らない仕組み
のものです。要はパケットが行方不明になっても再送要求が来ない
プロトコルです。
それでもデータ送受信の信頼性が無いUDPを使わないといけない
のでしょうか?
以上。
書き忘れ2
UDPプロトコルにしてください
>何故UDPなのでしょか?
横槍になりますけど、
チャットみたいのだとUDPの方がいいですよね。
どっちがサーバーかとか無いようなものには。
損失よりもリアルタイムを求める場合にも。
winsockの習作にもUDPは簡単でいいかもしれませんね。
一方でファイル転送とかにはTCPですよね。
データ順序の問題もありますし。
エラーもOS側でいたれりつくせりですし。
ケースバイケースですよね。
TCPの方が利用機会は圧倒的に多いですけど。
回答ありがとうございました。
>何故UDPなのでしょか?
ちょっと動作の比較を行わなくてはならない事情がありまして・・・
私もその必要がなければ、普通にTCPだけですましていましたね。
解決!!
ツイート | ![]() |