Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 将套接字排序为客户端对象_.net_Sockets_Object_Chat - Fatal编程技术网

.net 将套接字排序为客户端对象

.net 将套接字排序为客户端对象,.net,sockets,object,chat,.net,Sockets,Object,Chat,我目前正在用C#制作聊天程序,我有一个关于客户端连接的问题 如何使连接到服务器的每个客户端(套接字)都有一个名称和更多详细信息 例如: 乔连接到服务器。将创建一个新对象c1,其中包含其名称和IP(用于踢击/静音/私人消息传递目的) 稍后,James连接到服务器。创建了一个新对象c2,其中包含James的姓名和IP 等等 我需要将客户机作为对象用于几个主要目的 例如,如果我想从聊天中踢某人,我可以在服务器上写“/kick”,它会踢他 我希望服务器检查具有该名称的客户端。如果它连接,踢它 要做到这一

我目前正在用C#制作聊天程序,我有一个关于客户端连接的问题

如何使连接到服务器的每个客户端(套接字)都有一个名称和更多详细信息

例如:

乔连接到服务器。将创建一个新对象c1,其中包含其名称和IP(用于踢击/静音/私人消息传递目的)

稍后,James连接到服务器。创建了一个新对象c2,其中包含James的姓名和IP

等等

我需要将客户机作为对象用于几个主要目的

例如,如果我想从聊天中踢某人,我可以在服务器上写“/kick”,它会踢他

我希望服务器检查具有该名称的客户端。如果它连接,踢它

要做到这一点,唯一的方法就是为每个客户机创建一个对象,以实现这些确切的目的


那么,如何为每个套接字创建一个对象呢?

您可以做的是,当客户机连接到您的服务器时,让客户机向您的服务器发送他们是谁(假设您没有任何安全性)。然后,您可以创建一个对象来包装新的传入套接字连接。使用此页面,您可以在AcceptCallback方法中实现逻辑,以获取连接的套接字并将其放入对象中。我希望我正确理解了你的问题

您可以做的是,当客户机连接到您的服务器时,您让客户机向您的服务器发送他们是谁(假设您没有任何安全性)。然后,您可以创建一个对象来包装新的传入套接字连接。使用此页面,您可以在AcceptCallback方法中实现逻辑,以获取连接的套接字并将其放入对象中。我希望我正确理解了你的问题

只需将所有相关信息包装在一个类中:

class ClientInfo {
 public string Name { get; set; }
 public Socket Socket { get; set; }
}
您只需列出以下各项:

List<ClientInfo> clients = new List<ClientInfo>();
您还可以按名称和套接字查找客户端:

var client = clients.SingleOrDefault(x => x.Name == "x");
client.Socket.Send(...);

只需将所有相关信息包装在一个类中:

class ClientInfo {
 public string Name { get; set; }
 public Socket Socket { get; set; }
}
您只需列出以下各项:

List<ClientInfo> clients = new List<ClientInfo>();
您还可以按名称和套接字查找客户端:

var client = clients.SingleOrDefault(x => x.Name == "x");
client.Socket.Send(...);

我已经编辑了你的标题。请参阅“”,其中的共识是“不,他们不应该”。仅仅创建一个类来保存每个客户机的详细信息有什么错?另外,您是指“存储”还是“排序”?排序。但是问题是,John,我还需要一个套接字列表,以及另一个包含name和IP的对象列表。但我不能总是确保当我访问客户端[0](客户端列表中的第一个对象)时,它与连接的[0](套接字列表中的第一个套接字)是同一个客户端。那么我该怎么做呢?创建一个存储所有信息的类。我已经编辑了你的标题。请参阅“”,其中的共识是“不,他们不应该”。仅仅创建一个类来保存每个客户机的详细信息有什么错?另外,您是指“存储”还是“排序”?排序。但是问题是,John,我还需要一个套接字列表,以及另一个包含name和IP的对象列表。但我不能总是确保当我访问客户端[0](客户端列表中的第一个对象)时,它与连接的[0](套接字列表中的第一个套接字)是同一个客户端。那么,我如何才能正确地做到这一点呢?创建一个存储所有信息的类。这样,我就可以创建一个对象数组,为每个连接的客户端创建一个新对象(该对象将存储客户端的数据)。但是我也需要一个不同的套接字数组,对吗?(一个用于名称和IP,一个用于套接字)因此我可以创建一个对象数组,该数组将为每个连接的客户端创建一个新对象(该对象将存储客户端的数据)。但是我也需要一个不同的套接字数组,对吗?(一个用于名称和IP,一个用于套接字)哦,然后我可以通过访问ClientInfo的类套接字字段轻松地向客户端发送消息?是的。我认为您认为需要两个数组/列表。通过包装Socket类,您只需要一个。好的,然后我将使Socket成为客户机对象的一部分。非常感谢你!哦,然后我可以通过访问ClientInfo的类套接字字段轻松地向客户端发送消息?是的。我认为您认为需要两个数组/列表。通过包装Socket类,您只需要一个。好的,然后我将使Socket成为客户机对象的一部分。非常感谢你!