【发布时间】: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 将他从服务器中踢出