[リストへもどる]   [VBレスキュー(花ちゃん)]
一括表示

投稿時間:2007/05/05(Sat) 20:28
投稿者名:梅野
Eメール:
URL :
タイトル:
TCPで自分自身としか接続されない
VB6で開発しています。
VB歴は趣味で6年ほどやっております。

TCPを用いたカードゲームを作成しております。
サーバに多数のWinsockをコントロール配列で準備し、
クライアントの人数だけwinsockのソケットを作りListenしています。
自分のパソコンにサーバとクライアントを置き
クライアントから接続要求を出せばサーバと接続できるのですが、
自分のパソコンにサーバを、他人のパソコンにクライアントを置き
接続要求を出してもらった場合サーバと接続することができません。
プログラムは自分で使うものと他人に使ってもらうものでは全く書き換えておりません。

自分のパソコンにサーバとクライアントの両方がある場合は
データのやり取りもうまく行っているのですが、
他人のパソコンから接続要求を出してもらっても
自分のパソコンのサーバ側にはConnectionRequestイベントも発生しません。

以下はクライアント側の接続部分のコードです。

With Form6.Winsock1
    .RemotePort = aiteport'RemotePortを格納してあります
    .LocalPort = zibunport'LocalPortを格納してあります
    .RemoteHost = ip'サーバのIPアドレスを格納してあります。
    .Close
    .Connect
End With

以下はサーバ側の接続部分のコードです。

With Winsock1(j)
    .Close
    .RemotePort = Val(Left(iremono, InStr(iremono, vbTab) - 1))
  'ファイルから読み出した一行をiremonoに格納してあります
    .LocalPort = Val(Mid(iremono, InStr(iremono, vbTab) + 1, 4))
  'ファイルにはクライアントのRemotePortとLocalPortが記入されています
    .Listen
End With

Private Sub Winsock1_ConnectionRequest(Index As Integer, ByVal requestID As Long)
Winsock1(Index).Close
Winsock1(Index).Accept requestID

なお、UDPではこのプログラムとは全く違いますが、
自分と他人のパソコン間でも通信できました。

どうすればTCPでも他人と接続・通信することができるのでしょうか。
ご教授お願いします。

投稿時間:2007/05/07(Mon) 11:11
投稿者名:いな
Eメール:
URL :
タイトル:
Re: TCPで自分自身としか接続されない
> どうすればTCPでも他人と接続・通信することができるのでしょうか。
> ご教授お願いします。

まずはじめに、Etherealなどを用い、
希望通りの制御メッセージが流れているか?
の確認からでしょうか?

プロトコルによっては、Echo、WindowのSizeの設定が必要な場合がありますし・・・。

投稿時間:2007/05/08(Tue) 23:17
投稿者名:梅野
Eメール:
URL :
タイトル:
ありがとうございました。
> まずはじめに、Etherealなどを用い、
> 希望通りの制御メッセージが流れているか?
> の確認からでしょうか?
>
> プロトコルによっては、Echo、WindowのSizeの設定が必要な場合がありますし・・・。

返信が遅れ誠に申し訳ありません。

ご紹介頂いたetherealですが、早速ダウンロードして使わせていただいております。
しかし、何分まだ不慣れなソフトなもので、理解に苦戦しております。
なんとか、TCPでパケットがやり取りされていることがわかりました。
このソフトを用いていろいろテストしてみようと思います。

ご教授ありがとうございました。

投稿時間:2007/05/09(Wed) 11:27
投稿者名:いな
Eメール:
URL :
タイトル:
Re: ありがとうございました。
> ご紹介頂いたetherealですが、早速ダウンロードして使わせていただいております。
> しかし、何分まだ不慣れなソフトなもので、理解に苦戦しております。

簡単な使い方マニュアルなどの代わりとして、
http://www.space-peace.com/ethereal/
が参考となるかと思います。

> なんとか、TCPでパケットがやり取りされていることがわかりました。
> このソフトを用いていろいろテストしてみようと思います。

実際は、相手と自分だけでフィルタリングをかけて、
ip.addr==XXX.XXX.XXX.XXX(自分のIP) || ip.addr==XXX.XXX.XXX.XXX(相手のIP)
余計な信号を排除して、確認してみるとわかりやすいかと思います。

どんな信号が流れているかわかれば・・・。受信側が悪い、送信側が悪い
というようなことがわかりますしね。