2012-01-02 67 views
1

我在vb.net中使用套接字編程來創建服務器客戶端遠程處理應用程序。當我在win 7中使用客戶端和服務器時出現問題。對於win xp或跨平臺的通信(例如win 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() 

在win 7上運行客戶端和服務器時,會引發下面的錯誤:

連接嘗試失敗,因爲連接的方沒有正確一段時間後響應或已建立的連接失敗,因爲連接的主機沒有反應

請幫我找出問題是。這是贏得7級的權限嗎?

+0

服務器如何接受傳入連接? – 2012-01-02 14:17:10

+0

Tcplistener正在使用任何IP地址監聽指定的端口,只要創建了tcpClient,它就會將數據發送到服務器,並且服務器使用代碼(添加問題)讀取網絡流:Dim client As TcpClient = Nothing 昏暗的NetStream作爲的NetworkStream =無 如果Listener.Pending(),然後客戶端 = Listener.AcceptTcpClient() 的NetStream = client.GetStream() – Harsh 2012-01-02 14:20:55

+0

你解除防火牆上的端口? IP地址是否正確? – 2012-01-02 18:05:21

回答

0

下面是這個問題,併爲它的解決方案:

  1. 問題:

    的Win 7自帶的IP V6。因此,無論何時我們使用Dns.GetHostAddresses(主機名),它都會返回與主機相關的所有IP地址(包括ip v4 & ip v6)。使用這個ip v6地址與功能爲ip v4兼容性創建問題。

  2. 解決方案:

    每當使用Dns.GetHostAddresses(主機名),檢查IP v4的。

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

希望這將幫助其他人的socket編程工作。 :)

0

如果你會考慮在c#中做這個工作,你是否檢查過開源通信框架networkComms.net?試圖重新發明輪子沒有意義。