tagCANDY CGI VBレスキュー(花ちゃん)の Visual Basic 6.0用 掲示板
VBレスキュー(花ちゃん)の Visual Basic 6.0用 掲示板
[ツリー表示へ]  [ワード検索]  [Home]

タイトル Winsockを用いた双方向ソケット通信について
投稿日: 2008/03/05(Wed) 15:28
投稿者ダリア
いつもお世話になります。ダリアです。
初歩的なことかもしれませんが是非にアドバイスをお願いしたく思います。
Winsockを用いたソケット通信についてです。
環境はWinXP、VB6を使用しています。

目的はA側とB側での双方向でのソケット通信です。ポートは二つ用意します。
(A、Bはそれぞれ単独のEXEです。動作を確認したいので現在はA,Bがほぼ同じプログラムで、ポート指定のみ逆にしています。A側ではwskTcpClient(0).LocalPort = "2222"、wskTcpInter.RemotePort = "1111")
A側の接続ボタンをクリックの後B側の接続ボタンをクリックすると、B側の送信は可能。A側は不可。
B側の接続ボタンをクリックの後A側の接続ボタンをクリックすると、A側の送信は可能。B側は不可。
タイミングのせいなのか、と思ったりもするのですが。

エラーメッセージは送信ボタンクリック後のwskTcpInter_State(関数)にてSTATEを表示させています。”ホストの解決処理中です”とメッセージが出ます。
接続されていないのだろうとは思うのですが、これを回避する方法が分かりません。
申し訳ありませんが、よろしくお願いします。


MSDNのプログラムを参考にサーバ側(B側)のプログラムを以下のように作りました。
'接続ボタンをクリック
Private Sub command1_click()
On Error GoTo err_end:
    wskTcpClient(0).Close
'ポート番号を指定して相手アプリからの接続要求を待つ
    wskTcpClient(0).LocalPort = "1111"
    wskTcpClient(0).Listen
    
    wskTcpInter.Close
    wskTcpInter.Protocol = sckTCPProtocol
    wskTcpInter.LocalPort = 0
    wskTcpInter.RemoteHost = "localhost"
    wskTcpInter.RemotePort = "2222"
    wskTcpInter.Connect
    
    Exit Sub
    
err_end:
    MsgBox (wskTcpClient(0).State)
    
End Sub


'送信ボタンクリック
Private Sub command4_click()
    
If wskTcpInter.State <> 7 Then
        wskTcpInter.Close
        wskTcpInter.Connect
        wskTcpInter_State
Else
        wskTcpInter.SendData "TestData"
End If
End Sub

Private Sub wskTcpInter_DataArrival(ByVal bytesTotal As Long)
    Dim strBuf As String
    wskTcpInter.GetData strBuf
    Text2.Text = strBuf
End Sub


Private Sub wskTcpClient_ConnectionRequest(Index As Integer, ByVal requestID As Long)
If wskTcpClient(intConnectMax).State <> sckClosed Then
        wskTcpClient(intConnectMax).Close
End If
'相手アプリからの接続要求を受け付ける
    intConnectMax = intConnectMax + 1
    wskTcpClient(intConnectMax).Accept requestID
    
End Sub

Private Sub wskTcpClient_DataArrival(Index As Integer, ByVal bytesTotal As Long)
'データが届く
    Dim strBuf As String    
'相手アプリの送信データを取得する
    wskTcpClient(Index).GetData strBuf
    Text1.Text = "メインから「" & strBuf & "」を受信しました。"
'相手アプリにデータを返信する
    wskTcpClient(Index).SendData StrConv(strBuf, vbWide)
End Sub

- 関連一覧ツリー をクリックするとツリー全体を一括表示します)

古いスレッドにレスはつけられません。