Winsock(TCP)を用い、タイマーと連携させて一定パケットを送るには?


あかひげ  2002-11-13 18:47:55  No: 76344

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で見ても何も送信されていない様に見えました。
こういう場合どのように対策すれば宜しいか、是非教えていただきたく。


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

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






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