Winsockコントロールで、TCPセッションを保ち、数秒おきに100発程度
(内部データ一部インクリメント)送信したいのですが、一向にうまくいきません。
というよりなぜかすさまじく大きいパケットができ、送信時にフラグメントしてしまいます。
以下がコードになります。Winsockでうまくデータが飛ばないとMicrosoftにバグ情報があり
SP5あてたにも関わらずなのですが、、、、あと使用目的はネットワーク評価でプロトコル種別
を一定時間流す為であり、DoS目的ではない事を予めご了承ください。
例1)・・・・このケースができれば全てうまく行くと思うのですが、、、
dim i as integer
dim data(46) as byte
for i = 0 to 99
winsock.senddata data
next i
例2)
winsock.senddatacompleteイベントでフラグを付ける場合
data(42)〜data(45)はIPアドレス
private タイマー() '10秒更新
bgp_con.SendData data '一発目のデータ
if flag = 1 Then '1発目のデータ送信後
increase 'データ内部に存在するIPアドレスをインクリメントするルーチン
End If
end sub
Private Sub winsock_SendComplete()
flag = 1
End Sub
sub increase()
For m = 1 To 98
If flag = 1 Then
If data(45) < 255 Then
data(45) = data(45) + 1
Else
If data(44) < 255 Then
data(45) = 1
data(44) = data(44) + 1
Else
If data(43) < 255 Then
data(44) = 1
data(43) = data(43) + 1
Else
data(43) = 1
data(42) = data(42) + 1
If data(42) = 222 Then
m = 98
End If
End If
End If
End If
flag = 0
winsock.SendData data 'インクリメントしたデータを送信するはず、、
Next m
end sub
このケースの場合は始めの一発だけしか飛びません。
ループ内部にあるsenddataは働いていない?ように見えます。
働いていたらsenddatacompleteに飛びフラグ"1"を付加するはずですが、、、
例3)
最後のインクリメント部分を無限ループにしました。(winsockが動いているか確認する為)
flag = 0
bgp_con.SendData open_bgp
Else
m = m - 1 'データが正常に送られるまでループを繰り返す、、
End If
Next m
結果、無限ループに落ちいり、Snifferで見ても何も送信されていない様に見えました。
こういう場合どのように対策すれば宜しいか、是非教えていただきたく。
ツイート | ![]() |