2012-01-02 13 views
1

vb.netでソケットプログラミングを使用して、サーバークライアントリモーティングアプリケーションを作成しています。この問題は、勝利7のボックスでクライアントとサーバーの両方を使用する場合に発生します。勝利のxpやクロスプラットフォームのコミュニケーション(例えば、xpを勝ち7に勝つ)はうまくいきます。以下 は、クライアントとサーバの終了時に使用されるコードです:vb.netソケットプログラミングを使用したwin7での接続の問題

クライアント:

Dim ips As IPAddress() 

ips = Dns.GetHostAddresses(HostName) 

For index = 0 To ips.Length - 1   

Next index 

======================== ===================================

private sub sendFile(byval ip as string) 

Dim client As TcpClient = Nothing client = New TcpClient(ips(index).ToString, 8000) 

    'Code to send file 

End sub 

サーバー:

Dim Listener As TcpListener = Nothing 
Listener = New TcpListener(IPAddress.Any, 8000) 
Listener.Start() 

Dim client As TcpClient = Nothing 
     Dim netstream As NetworkStream = Nothing 

       If Listener.Pending() Then 
       client = Listener.AcceptTcpClient() 
       netstream = client.GetStream() 

win7でクライアントとサーバーの両方を実行すると、以下のエラーがスローされます。

接続パーティが適切に一定期間後に応答しなかったため、接続の試行が失敗した、または確立された接続は、接続されたホストが

を応答に失敗したため、どのような問題を把握するために私を助けてください失敗しましたです。それは勝利7の権限のレベルですか?

+0

サーバーは着信接続をどのように受け入れますか? –

+0

TcpClientが作成され、サーバーにデータを送信し、サーバーが(問題の追加された)コードを使用してネットワークストリームを読み取ると、Tcplistenerは任意のIPアドレスで指定されたポートをリッスンします。Dim client As TcpClient = Nothing NetworkStream =何も として 薄暗いNetStreamの場合はListener.Pending()すると クライアント= Listener.AcceptTcpClient() のNetStream = client.GetStream() – Harsh

+0

は、ファイアウォールのポートのブロックを解除しましたか? IPアドレスは正しいですか? –

答えて

0

が問題とそのためのソリューションです:

  1. 問題:

    勝利7は、IP V6が付属しています。したがって、Dns.GetHostAddresses(hostname)を使用するたびに、ホストに関連付けられたすべてのIPアドレスが返されます(両方ともip v4 & ip v6)。 ip v4との互換性のためにこのip v6アドレスを使用すると、問題が発生しました。

  2. ソリューション:

    Dns.GetHostAddresses(ホスト名)を使用するたびに、IP v4のために確認してください。

    if (ObjTemp.AddressFamily.ToString() == ProtocolFamily.InterNetwork.ToString()) 
    

これはソケットプログラミングに取り組んで他の人を助けるだろうと思います。 :)

0

これをC#で行うことを検討しているのであれば、オープンソースの通信フレームワークであるnetworkComms.netをチェックアウトしていますか?車輪を再発明しようとしない。

以下
関連する問題