如何得到多用户socket连接时,某个用户所处的连接号

编译失败 2003-03-01 11:51:11
如何得到多用户socket连接时,某个用户所处的连接号,

如网吧里的多用户,a,b,c三台电脑连接服务器,顺序不固定,我要向b机发包,但不知道b机处于第几个连接

Socket->Connections[i]->SendText(XXX);


如何确定i?
...全文
70 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
apollonew 2003-03-12
  • 打赏
  • 举报
回复
那你就对它做一个指针~~
然后就直接发啊
编译失败 2003-03-05
  • 打赏
  • 举报
回复
我覺得 apollonew(阿波罗) 的方法在有些地方不妥,只适用于小的网絡,.

這本是一個公安廳用于管理全省网吧用戶的軟件,必須通過INTERNET,而且同時的連接有好几万,
那這個循環要到什么時候?
sam200401 2003-03-05
  • 打赏
  • 举报
回复
楼主你应将用户的连接相关资料存入一个ListBox里.要向谁发送就在ListBox中读取.这是最好的方法.

例程:
void __fastcall TForm1::ServerSocket1ClientConnect(TObject *Sender,
TCustomWinSocket *Socket)
{
Socket->Data =0;
AddConnection(Socket);
}
//---------------------------------------------------------------------------
void TForm1::AddConnection(TCustomWinSocket *ClientSocket)
{
AnsiString UserNickName="Unknown";
TListItem *TempItem=ListView1->Items->Add();
TempItem->Caption =UserNickName;
TDateTime CurrentDT(TDateTime::CurrentDateTime());
TempItem->SubItems->Add(ClientSocket->RemoteHost);
TempItem->SubItems->Add(CurrentDT);
TempItem->Data = ClientSocket;
}
apollonew 2003-03-04
  • 打赏
  • 举报
回复
long UserFlag=Socket->SocketHandle;

这样做!! 你每一个接入的客户端的 handle 不一样的
当然 Client 接入时 就用 Server 向 Client 发一个包让这个 Client 再回复一个
包确认一下。
然后用一个链表来存着这资料
最后你要向不同的客户端发资料时就是

for (int j=0;j<Server->Socket->ActiveConnections;j++)
{
if (Server->Socket->Connections[j]==UserFlag)//是你要发的那个 Client
{
Server->Socket->Connections[j]->SendText("要说的话");
break;
}
}
invalid 2003-03-03
  • 打赏
  • 举报
回复
你要发送的对象的特征是什么,IP,用户名?如果什么都不知道,那就没有办法了。
编译失败 2003-03-03
  • 打赏
  • 举报
回复
這可能是個好辦法,讓我試它一試,謝了,上面這位兄弟.
我以前用的是個苯辦法,就是添加一個Listbox,當產生一個連接后就在Listbox里加上這個連接的IP,那么,我要對哪個連接發包,我只要求 Listbox->Indexof(xxx.xxx.xxx.xxx),因為此時客戶机的 Connections 和它的IP在 Listbox 中的 Index 是相同的,那就可以 Socket->Connections[Listbox->Indexof(xxx)]->SendText(xxx);不過要是有數十万用戶,那Listbox里不知能不能放的下!!!
l_clove 2003-03-03
  • 打赏
  • 举报
回复
在OnAccpet中记录Socket->RemoatAddress或Socket->RemoatHost的信息,
这样就能知道有哪几个客户连到服务器上了
然后循环比较,找出你要的Socket发送数据就行了
cdlcl 2003-03-02
  • 打赏
  • 举报
回复
for (int i=1;i<10;i++)
{
if(Socket->Connections[i]->RemoteHost=="b")
Socket->Connections[i]->SendText(xxx);
}
不知行不?
编译失败 2003-03-01
  • 打赏
  • 举报
回复
可我现在连i都没确定,就是说我并不知道这client处于第几个连接,我只是要发数据,如果我要向所有client发,我可以:

for (int i=1;i<10;i++)
{
Socket->Connections[i]->SendText(xxx);
}

现在我只想向其中一个client发包,而且不知道这个client处于哪个Connections
猎人66 2003-03-01
  • 打赏
  • 举报
回复
用Socket->Connections[i]->RemoteHost或者
Socket->Connections[i]->RemoteAddres来区别吧

1,317

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder 网络及通讯开发
社区管理员
  • 网络及通讯开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧