アプリ版:「スタンプのみでお礼する」機能のリリースについて

お世話になります。VBで1対多数の通信プログラムを作っているのですが、受けて側をConnectionRequest
のプロシージャで
If Index = 0 Then

sockNum = sockNum + 1

Load Winsock1(sockNum)


Winsock1(sockNum).LocalPort = 0


Winsock1(sockNum).Accept requestID

としてコントロール配列をさせています。

通信は問題ないのですが、WinsockのIndexがIntegerの上限まできたら、オーバーフローを起こします。
リセット、もしくは回避の方法がまったくわからず困っています。どうぞお力お貸しください。

A 回答 (1件)

 VBのWinSockコントロールは色んな所にサンプルあるけど、みんなこのタイプよね。

たしかMSDNのもこれ。まぁサンプルなのでしかたないとしても、実際に利用する場合は1番以上の番号を再利用する形にしてあげないといけない。
 激簡単なサンプルを書いてみたので参考にして欲しい(今ささっと書いた奴なので動かなければ修正よろしく)。Form1にWinSock1を置いて実行してね。

Option Explicit

Private sockNum As Integer
Private closedSocks As Collection

Private Sub Form_Load()
Set closedSocks = New Collection
Winsock1.Item(0).Bind 9900
Winsock1.Item(0).Listen
End Sub

Private Sub Winsock1_Close(Index As Integer)
Unload Winsock1(Index)
closedSocks.Add Index
End Sub

Private Sub Winsock1_ConnectionRequest(Index As Integer, ByVal requestID As Long)
If Index = 0 Then
Dim connectsocknum As Integer
If closedSocks.Count > 0 Then
connectsocknum = closedSocks.Item(1)
closedSocks.Remove 1
Else
sockNum = sockNum + 1
connectsocknum = sockNum
End If
Load Winsock1(connectsocknum)
Winsock1.Item(connectsocknum).Accept requestID
End If
End Sub

Private Sub Winsock1_DataArrival(Index As Integer, ByVal bytesTotal As Long)
Dim data As Variant
Winsock1.Item(Index).GetData data
Winsock1.Item(Index).SendData data
End Sub

この回答への補足

返事遅くなって申し訳ありません。サンプルありがとうございます。早速試してみます。

補足日時:2006/10/01 12:00
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!