请教,关于Socket多对多通信问题?

sdhsw 2006-05-13 08:21:30
我在服务端有一ServerSocket控件,客户端登录时用了一ClientSocket1控件,而在客户端主程序里用了一ClientSocket2控件,服务端在响应时分别用ServerSocket1->Socket->Connections[0]与ServerSocket1->Socket->Connections[1]来响应客户端响应,在点对点时调试正常,若在多台客户端访问时服务端如何判断到底是哪个客户端的请求,并如何用ServerSocket1->Socket->Connections[0]这样的语句响应呢?
...全文
414 14 打赏 收藏 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
pp616 2006-05-15
  • 打赏
  • 举报
回复
在Server 端自己建一个TCustomWinSocket的对应关系表。别用Connections[下标]来做。

xyx119 2006-05-14
  • 打赏
  • 举报
回复
表述有误!
sdhsw 2006-05-14
  • 打赏
  • 举报
回复
由于本人第一次进行socket编程,也是第一次用C++Builder,很多不熟,还请高手们帮个忙。
我现在客户端登录界面使用了一ClientSocket1控件,登录后在客户端主程序里也用了一个ClientSocket2控件,在服务器响应时若只用ServerSocket1- >Socket->Connections[0]->SendText则客户端能登录,而在主程序里使用的请求则未得到响应,若在服务端修改,把响应客户端主程序里的socket请求,用ServerSocket1- >Socket->Connections[0]->SendText来响应就正确了,但这只是在单机上测试,若我把程序放在局域网内另一台机同时上则无法得到正确结果。请问象此种现象到底应该如何解决呢?
sdhsw 2006-05-14
  • 打赏
  • 举报
回复
我昨天调试分析后,感觉在客户端使用了两个ClientSocket控件后,在与服务端相连时服务端将认作两个连接客户,因此在服务端分别用ServerSocket1- >Socket->Connections[0]与
ServerSocket1->Socket->Connections[1]来响应一个客户端的请求,这样单机调试时是正确的,若两台以上测试时错误。那是否应在客户端一定改成使用一个ClientSocket控件呢?还是另有其它办法?kwokwinglau(每天前进一点)大侠的不知怎么做?
pp616 2006-05-13
  • 打赏
  • 举报
回复
在Server 端自己建一个对应关系表。
铖邑 2006-05-13
  • 打赏
  • 举报
回复
楼主能不能说的详细一点。什么样的需求?
铖邑 2006-05-13
  • 打赏
  • 举报
回复
分别连上去
ClientSocket1->Socke->SendText("This is ClientSocket1.");
ClientSocket2->Socke->SendText("This is ClientSocket2.");
哈哈
sdhsw 2006-05-13
  • 打赏
  • 举报
回复
是啊,每个客户端有两个ClientSocket,而在多个客户端同时访问时服务端是如何分别响应的?
铖邑 2006-05-13
  • 打赏
  • 举报
回复
服务器端没法保证ServerSocket1->Socket->Connections[0]、ServerSocket1->Socket->Connections[1]都是何方神圣,这个不是服务器能决定的。按照楼主的意思,每个客户端应该是跟服务器有2个连接,这样无法确定哪2个连接是配对的,是这样的吗?
铖邑 2006-05-13
  • 打赏
  • 举报
回复
楼主的描述有点问题,理解上有误差。
sdhsw 2006-05-13
  • 打赏
  • 举报
回复
xpdavis(咕嘟) :我使用时也感觉不太规范,但开始有问题,后来想到由于使用了两个clientSocket,所以在服务端改了一下,结果正确,但总感觉不太好。若这样的话多台客户端访问时服务端就不知道怎样响应了,我就试一下kwokwinglau(每天前进一点)大侠的看.
xpdavis(咕嘟):你有没其它办法呢?
铖邑 2006-05-13
  • 打赏
  • 举报
回复
回复人:sdhsw() ( 一级(初级)) 信誉:100 2006-05-13 14:49:00 得分:0
?
我的意思是现在单机调试用ServerSocket1- >Socket->Connections[0]与ServerSocket1->Socket->Connections [1]来分别响应客户端的ClientSocket1与ClinetSocket2,那如果多台客户端同时请求访问时服务端又是采用何种方法来分别响应每一客户端的?


你没法做到这一点,可能是ServerSocket1- >Socket->Connections[0]对应ClinetSocket2
ServerSocket1->Socket->Connections[1]对应ClientSocket1
这样做也不规范
kwokwinglau 2006-05-13
  • 打赏
  • 举报
回复
客户端必须连接时提供自己的名字,连接到Server时注册:
void __fastcall TMainForm::AddToCL(int UserID,String UserName, TCustomWinSocket *Socket)
{
TList *CL=ClientList->LockList();
TClientInfo *CS=new TClientInfo();
CS->ID=UserID;
CS->UserName=UserName;
CS->Socket=Socket;
ClientList->Add(CS);
delete CS;
ClientList->UnlockList();
}
结构体如下:
struct TClientInfo
{
int ID ;
String UserName;
TCustomWinSocket *Socket;
};
/* ---------------------------------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------------------------------- */
__fastcall TMainForm::TMainForm(TComponent *Owner) :
TForm(Owner)
{
ClientList=new TThreadList();//线程安全List
}
根据ID或UserName在CL中查找指定的用户端就可以向CL->Socket发信息了.
sdhsw 2006-05-13
  • 打赏
  • 举报
回复
我的意思是现在单机调试用ServerSocket1->Socket->Connections[0]与ServerSocket1->Socket->Connections[1]来分别响应客户端的ClientSocket1与ClinetSocket2,那如果多台客户端同时请求访问时服务端又是采用何种方法来分别响应每一客户端的?

1,317

社区成员

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

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