【问题标题】:C# Multiple Client - Sending Nickname along with IP and port noC# 多客户端 - 发送昵称以及 IP 和端口号
【发布时间】:2015-01-11 23:19:07
【问题描述】:

我正在开发一个 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" 由 3 个变量组成:1)Socket 2)bool first = true 3)string nick

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

我认为上述解决方案不是一个好的解决方案,实际上几乎没有什么好:) 我想应该有一些适当的方法。

【问题讨论】:

  • 连接后需要向服务器发送数据包。服务器必须接受才能向其发送数据。以您的数据包样式发送类似 Auth 的内容,然后让服务器以是或否响应(再次以您的数据包样式),如果 inavlid 将他从服务器中踢出

标签: c# sockets


【解决方案1】:

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

客户端连接

服务器接受

客户端发送类似“Auth [用户名]”的内容

服务器检查用户名是否空闲

如果不是:服务器向客户端发送类似“RejectAuth”的信息并断开连接。

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

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

【讨论】:

  • 是否有任何现有的身份验证库或者我应该使用缓冲区?我做了一些研究,但找不到任何东西。有人说套接字没有身份验证,这应该在应用程序基础上处理。我是应该写一些函数/类的人吗?如果是这样,你能给我一些提示吗?
  • @xCoder 如果你真的想要密码验证,你可能需要一个验证服务器。因此,您发送用户名和密码并获得会话密钥的主服务器。然后您可以将该会话密钥发送到您正在连接的服务器,服务器将从主服务器的 api 获取信息。如果您只想发送用户名,请在连接后发送并等待响应^^
  • 我在向服务器发送数据时使用了键值。从客户端发送的任何缓冲区都有一个键值,服务器会评估它们并采取相应的行动。即,如果密钥是 nick,请查看记录的客户...谢谢您的回答顺便说一句:)
猜你喜欢
  • 1970-01-01
  • 2018-09-19
  • 2014-12-29
  • 2012-10-17
  • 1970-01-01
  • 2012-12-04
  • 2015-02-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多