2014-04-24 113 views
0

我正在嘗試創建一個程序,以便從網絡上的另一臺計算機發送和接收字符串。只有通過該程序連接在一起的唯一一對計算機。除了第一次連接之外,大部分工作都已完成並完美工作。只有兩臺計算機同時打開程序時才能建立第一個連接。由於另一臺計算機上的服務器不會運行,因此連接將被拒絕。下面是代碼:通過網絡等待連接

public MultiplayerState2(Game1 game) 
    { 
     this.game = game; 
     localIp = GetLocalIP(); 


     server = new TcpListener(IPAddress.Parse(localIp), localPort); 


     server.Start(); 

     networkingThread = new Thread(getData); 
     networkingThread.Start(); 

     clientThread = new Thread(connectClient); 
     clientThread.Name = "Connect Client"; 
     clientThread.Start(); 
    } 

    void connectClient() 
    { 
     while (client == null) 
     { 

      try 
      { 
       client = new TcpClient(remoteIp, remotePort); 
       Console.WriteLine("Connected"); 
       clientThread.Abort(); 
      } 
      catch 
      { 
       Console.WriteLine("Waiting for partner"); 

      } 
     } 

    } 

這裏,connectClient應該等待來自計算機的連接。但是我得到的唯一結果是waiting for partner。這是等待連接的正確方法嗎?如果是的話,爲什麼它不起作用?

+0

拋出什麼異常? – FodderZone

+0

@FodderZone這是一個SocketException,這是由客戶端嘗試連接時未調用TcpListener.Start引起的。 – user26830

+0

請抓住SocketException並查找/傳遞ErrorCode。 http://msdn.microsoft.com/en-us/library/windows/desktop/ms740668(v=vs.85).aspx – FodderZone

回答

0

構造函數TcpClient嘗試連接到偵聽指定端口的服務器。但是這個過程有1分鐘的超時時間。如果連接在1分鐘內沒有成功,它將被關閉並拋出異常;因此你正在得到例外。

這是嘗試連接到服務器的唯一方法。您可以添加的唯一東西是導致線程睡眠(Thread.Sleep(n))一段時間,如10秒左右(取決於您的上下文)。