我看到了如何使Asynchronous Communication in C#異步通信
一個教程,但我只能在一個聊天的一個,我想知道如何與多臺PC聊天,
我能歸檔此不使用服務器?我不知道該怎麼做,因爲我是C#中的新手。
在此先感謝
我看到了如何使Asynchronous Communication in C#異步通信
一個教程,但我只能在一個聊天的一個,我想知道如何與多臺PC聊天,
我能歸檔此不使用服務器?我不知道該怎麼做,因爲我是C#中的新手。
在此先感謝
我覺得你是小錯誤的單詞「服務器」。它不是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));
}
你應該做的下一件事是要實現線程/異步爲您的服務器:)
感謝您的信息。 – MarckxMan
我希望你能明白這一點,並會向前邁進:) –
當然,你可以。但嘗試使用*您的服務器聊天*。或者實現XMPP客戶端。 –
我使用的WinForm應用程序 – MarckxMan
我不知道爲什麼人們低估了我的答案,所以我剛剛刪除它。對@ liran63我很清楚,每臺PC都可以成爲一臺服務器。所以我的意思是......沒有一臺普通的服務器,你不能有超過2臺PC聊天。如果您對此有任何想法,請分享。但是我已經完成了這個工作,Winforms,WPF和網絡與互聯網連接,根據我的經驗,如果沒有通用服務器,我從來沒有這樣做過。我可能是錯的。但是OP特別說'與多臺PC聊天'。通過「一對一」,我敢肯定他的意思是隻有2臺電腦在聊天。我說OP是對的嗎? –