タイトル | : Winsockを用いた双方向ソケット通信について |
記事No | : 11658 |
投稿日 | : 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
|