我有一個正在工作的客戶端/服務器多線程程序。 我的問題是,我怎麼能選擇任何客戶端,並從服務器發送他的數據包?[C#] Socket編程,客戶端接口
回答
我最常做的,是建立一個Client
類,它包含一個Socket
,當有一個新的傳入連接,我創建了一個新的客戶端,並給了他當前的服務器實例(this
),並定義了客戶端套接字。
Client類:
public class Client
{
public int Id;
public Socket socket;
public Server serverInstance;
public Client(Server server, Socket sock)
{
this.Id = GenerateNewUniqueId(); // Generates a unique id (you must implement it :p)
this.serverInstance = server;
this.socket = sock;
}
}
服務器接受連接:
List<Client> clients = new List<Client>();
// incoming connection
void AcceptConnection()
{
Client newClient = new Client(this, serverSocket.Accept());
clients.Add(newClient);
}
所以,如果你想發送給一個或所有客戶端,你可以做這樣的事情:
public void SendPacketToAll()
{
foreach (Client client in this.clients)
client.socket.Send(...);
}
public void SendPacketToUserById(int id)
{
foreach (Client client in this.clients)
if (client.Id == id)
client.socket.Send(...);
}
希望它有幫助,祝你好運
謝謝你。但是,當我想向客戶端發送數據包時,我需要客戶端的事件嗎?當客戶收到信息包時,他們會看到。 – ExclusivAtom
你有兩種方法可以用套接字接收數據。在客戶端或服務器端。在這裏的插座文檔:https://msdn.microsoft.com/en-us/library/system.net.sockets.socket(v=vs.110).aspx有一個名爲'BeginRevieve'的方法,需要回調方法。此方法用於異步進程。 如果你想要一個同步過程,你可以做一個while(true)語句,並且在這個循環中,你可以用'socket.Poll()'方法檢查是否有可用的數據。 – Eastrall
- 1. 「MFC/C++ Socket編程..」如何連接服務器和客戶端?
- 2. 客戶端無法與服務器C連接(Socket編程)
- 3. 客戶端服務器socket編程
- 4. 運行Web Socket客戶端編程
- 5. C socket編程沒有輸入端口
- 6. Socket編程客戶端服務器聊天應用程序C++
- 7. Ç - socket編程的客戶端 - 服務器 - 主機名連接
- 8. 如何在Socket編程中處理客戶端斷開連接?
- 9. 用於UDP客戶端的Windows C socket編程
- 10. Socket編程c#/客戶端 - 服務器通信
- 11. Socket編程C#(發送消息到客戶端)
- 12. C Socket編程中的多個客戶端
- 13. Java Socket的終止客戶端連接
- 14. Java SocketServer正在接受來自Socket客戶端的輸入,但Socket客戶端沒有從SocketServer接收輸入
- 15. Qt的 - 基於GUI和線程多客戶端Socket編程
- 16. Socket編程:服務器/客戶端和線程使用
- 17. 客戶端的Socket程序錯誤
- 18. Java Socket客戶端模式
- 19. 客戶端的Socket FPUTS
- 20. Socket編程多客戶端一臺服務器
- 21. Socket編程:使用固定IP在客戶端
- 22. C#異步套接字客戶端塊主接口線程
- 23. 多線程客戶端服務器編程在c + +窗口
- 24. 如何在C socket編程中使用select()在聊天客戶端程序中?
- 25. 在套接字編程中將多個端口連接到單個客戶端
- 26. 客戶端接口實現
- 27. 客戶端和服務器使用C#的Socket連接
- 28. iOS中的TCP Socket編程。服務器客戶端響應
- 29. Java Socket編程客戶端服務器通信問題
- 30. Java Socket編程單客戶端服務器
如果您的程序通過TCP套接字連接,那麼您將爲每個客戶端存儲一個套接字。將消息發送到相關的套接字。 – LordWilmore
是的,我使用TCP套接字。但是我總是爲新客戶端創建一個新的Socket。另外我需要一個「列表」,但哪個? – ExclusivAtom
是的,你爲每個客戶端創建一個新的套接字,所以如果你想發送一條消息給一個客戶端,然後通過你爲該客戶端存儲的套接字發送它。如果您不知道哪個套接字是針對哪個客戶端的,但您需要將其發送給特定的客戶端,那麼您需要從每個客戶端發送足夠的信息以允許服務器確定哪個客戶端是哪個客戶端。但這完全在你自己的控制之下。 – LordWilmore