我正在编写两个控制台应用程序,一个客户端和一个服务器。 我有点困在两件事上,起初看起来相当容易......
#1:我想为下面的一段代码编写一个函数,它将位转换为字符串,但我无法弄明白。当我使用它时服务器总是崩溃。我的功能与此功能略有不同,但那是因为我当前的代码必须包含连接信息,我认为有更好的方法:
byte[] b = new byte[100];
int k = s.Receive(b);
string packet = null;
for (int i = 0; i < k; i++)
{
Console.Write(Convert.ToChar(b[i]));
packet = packet + Convert.ToChar(b[i]);
}
我想这个功能不是问题,但是我如何使用它。任何帮助都会非常苛刻。
编辑: 我这样打电话和使用它:
byte[] b = new byte[100];
string response = BitConvert(b);
if (response == "Hi there")
#2 我希望客户端只用密码发送一次数据包。如果该密码与服务器中作为字符串提到的密码不匹配,它应该关闭与客户的联系。
我知道如何只发送一次数据包,但我不知道如何为每个客户端检查服务器中的数据包一次。
或者换句话说,目前服务器无法知道客户端是否已经过身份验证。所以我猜客户端需要有某种套接字ID,服务器需要一个带有ID的表,以及一个布尔值来查看它是否已经过验证。
答案 0 :(得分:1)
第一部分,将字节变成字符串......怎么样:
byte b[] = new byte[100];
int k = s.Receive(b, b.Length, 0);
string packet = Encoding.ASCII.getString(b, 0, k);
第2部分......不确定是否在我的头顶。
答案 1 :(得分:1)
我在Rob上面的第1部分和第2部分......
假设您正在使用TCP连接,System.Net.Sockets
类应该处理您的
需要。
如果您使用AcceptSocket
或AcceptTcpClient
从传入连接请求队列中提取连接,您将获得该连接唯一的套接字或tcpclient。只需将它打开,直到你完成它。 (如果您的服务还有其他事情要做,也有非阻塞替代方案......)
如果客户端关闭它或打开新连接,则必须以某种方式重新进行身份验证。 (这可能是通过包含您在首次进行身份验证时为其生成的令牌 - 如果您使用UDP连接,这是您唯一的选择。)