2014-02-14 91 views
0

我看到了如何使Asynchronous Communication in C#異步通信

一個教程,但我只能在一個聊天的一個,我想知道如何與多臺PC聊天,
我能歸檔此不使用服務器?我不知道該怎麼做,因爲我是C#中的新手。

在此先感謝

+0

當然,你可以。但嘗試使用*您的服務器聊天*。或者實現XMPP客戶端。 –

+0

我使用的WinForm應用程序 – MarckxMan

+1

我不知道爲什麼人們低估了我的答案,所以我剛剛刪除它。對@ liran63我很清楚,每臺PC都可以成爲一臺服務器。所以我的意思是......沒有一臺普通的服務器,你不能有超過2臺PC聊天。如果您對此有任何想法,請分享。但是我已經完成了這個工作,Winforms,WPF和網絡與互聯網連接,根據我的經驗,如果沒有通用服務器,我從來沒有這樣做過。我可能是錯的。但是OP特別說'與多臺PC聊天'。通過「一對一」,我敢肯定他的意思是隻有2臺電腦在聊天。我說OP是對的嗎? –

回答

0

我覺得你是小錯誤的單詞「服務器」。它不是Web服務器,它是服務請求的序數計算機(甚至應用程序)。 因此,對於多用戶聊天,您需要創建2種應用程序 - 服務器和客戶端。服務器將聽取客戶並回復它們。通常,只有一臺服務器和很多客戶端。 我建議你開始編寫簡單的服務器/客戶端程序,然後改進它們。 創建服務器,該服務器在一次只能爲1個用戶提供服務。它將監聽本地IP上的特定端口。我使用任務來簡化程序。

 byte[] ba = new byte[1024]; 
     new Task(() => { 
      Output("Going to listen to messages..."); 
      Socket listeningS = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); 
      // Listening to local address. You should listen to external IP for real server 
      IPEndPoint ep = new IPEndPoint(IPAddress.Any, port); 
      listeningS.Bind((EndPoint)ep); 
      // One and only client at a time :) 
      listeningS.Listen(1); 
      while (isRunning) 
      { 
       // Accept client, receive data and send it back 
       Socket clientS = listeningS.Accept(); 
       int total = clientS.Receive(ba, 0, ba.Length, SocketFlags.None); 
       total = clientS.Send(ba, 0, total, SocketFlags.None); 
       // Client will open new connection (but later it is possible to use same) 
       clientS.Shutdown(SocketShutdown.Both); 
       clientS.Close(); 

      } 
     }).Start(); 

然後從客戶端應用程序開始 - 這是最簡單的部分 - 只需連接,發送和接收數據。

byte[] ba = Encoding.UTF8.GetBytes(message); 
    Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); 
    s.Connect(IPAddress.Loopback, port); 
    total = s.Send(ba, SocketFlags.None); 
    total = s.Receive(ba, 0, ba.Length, SocketFlags.None); 
    if (total > 0) 
    { 
     Output(Encoding.UTF8.GetString(ba, 0, total)); 
    } 

你應該做的下一件事是要實現線程/異步爲您的服務器:)

+0

感謝您的信息。 – MarckxMan

+0

我希望你能明白這一點,並會向前邁進:) –