C# 多客户端 - 发送昵称以及 IP 和端口号

本文关键字:IP 口号 客户端 | 更新日期: 2023-09-27 18:30:33

我正在开发一个 C# 多线程套接字程序。用于连接的客户端代码为:

 c.Connect(ipText.Text, port);  // Can I add nickName here? probably not?
 thrReceive = new Thread(new ThreadStart(Receive)); //Receive -> accepts buffers from server
 thrReceive.Start();

在我开始解决问题之前,先快速了解一下我想做什么:客户端发送的所有数据都应定向到所有其他客户端,而不是发送到发送方,因此每次客户端发送数据时,程序都应遍历客户端列表并发送数据。

我正在努力解决的是端口和IP,我想向服务器发送昵称。之后,服务器将检查昵称是否唯一。否则,它将拒绝连接。

我想到了一个微不足道的解决方案,其中客户端发送带有它发送的句子的昵称,所以这是在与服务器建立连接之后。服务器保留结构列表,假设结构称为"param"。"param"由 3 个变量组成:1)套接字 2)布尔值优先 = 真 3)字符串昵称

每当建立新连接时,都会创建一个新的"参数",将"first"启动为true,将"nick"启动为空字符串,当然还有客户端的套接字。当同一个套接字第一次通过缓冲区发送数据时,我将提取它的昵称,将"first"设置为 false 并检查其唯一性,如果不是唯一的,则断开套接字并删除相关条目。

我相信上面的解决方案不是一个好的解决方案,实际上没有什么好的:)我想应该有一些适当的方法。

C# 多客户端 - 发送昵称以及 IP 和端口号

不能通过连接发送数据。这意味着您不能拒绝连接,但可以发送数据包以在服务器上进行身份验证。示例:

客户端连接

服务器接受

客户端发送类似"身份验证 [用户名]"的内容

服务器检查用户名是否可用

如果没有:服务器向客户端发送类似"拒绝身份验证"的内容并断开连接。

如果它是免费的:服务器发送类似"AcceptAuth"的内容,协议继续(共享信息,发送数据等)

注意:这不是最佳方法。您可以不断开连接,而是随机分配一个用户名并向他发送更改请求。这要好得多,因为它更快,用户可以发送新用户名并立即检查它是否空闲。