我有一个正在工作的客户端/服务器多线程程序。 我的问题是,我怎么能选择任何客户端,并从服务器发送他的数据包?[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