解决这个问题我给200元人民币!解决完之后我会立刻通过网络银行转帐,支持建行,工商银行。我还有联系电话:0379-2863028货真价实绝对给

tongqingchao 2003-09-10 07:12:43
我用Socket做拉一个CS结构的程序,N客户端,对一服务器端。
当用户运行程序后Socket激活,服务器COUT=COUT+1,这时候又有一个客户端启动COUT=COUT+1(这时候COUT已经等于1拉),当客户端2启动后,客户端一发出消息这里的消息是帐号密码,服务器验证通过后返回消息!Socket->Connections[COUT]这时候COUT已经等于2拉~服务返回的消息却发给我客户端2,这个问题怎么解决呢!!
...全文
75 34 打赏 收藏 转发到动态 举报
写回复
用AI写文章
34 条回复
切换为时间正序
请发表友善的回复…
发表回复
Santos 2003-09-11
  • 打赏
  • 举报
回复
44
fjye 2003-09-11
  • 打赏
  • 举报
回复
我这个方法绝对可行,现在用在程序里也没问题,不知道有没有更好的办法,期待中...
fjye 2003-09-11
  • 打赏
  • 举报
回复
开玩笑,影响速度?你的机器什么配置的,不会的,我这样用的好好的啊,算你有20个客户端,就20个二维数组的便利才多少时间啊
tongqingchao 2003-09-11
  • 打赏
  • 举报
回复
fjye(老姜@龙城飞将)想法我想过拉~可能会影响速度呀!!是不是呀!
tongqingchao 2003-09-11
  • 打赏
  • 举报
回复
谢谢大家的支持哦!
oceankang 2003-09-11
  • 打赏
  • 举报
回复
我有一个SCO UNIX的版本程序如果需要和我联系。post_kang@163.net
在WINDOWS下你就用Indy来做吧 我觉得要比SCO UNIX的简单多
tongqingchao 2003-09-11
  • 打赏
  • 举报
回复
目前我有一万个客户端在同时登陆!!
Santos 2003-09-11
  • 打赏
  • 举报
回复
void __fastcall TForm1::ServerSocket1ClientRead(TObject *Sender,
TCustomWinSocket *Socket)
{
//-- 记下Socket->SocketHandle值到临时变量中
//-- Socket->ReceiveText();
//-- 调用验证程序验证收到的信息

for(int i = 0 ; i < ServerSocket1->Socket->ActiveConnections; i++)
{
if ( Socket->SocketHandle == ServerSocket1->Socket->Connections [i]->SocketHandle)
{
ServerSocket1->Socket->Connections [nPos]->SendText (Edit1->Text);
return;
}
}

}
binbin 2003-09-11
  • 打赏
  • 举报
回复
up一下
nb一上
binbin 2003-09-11
  • 打赏
  • 举报
回复
上一dn
binbin 2003-09-11
  • 打赏
  • 举报
回复
dn
fjye 2003-09-10
  • 打赏
  • 举报
回复
我也有类似的问题,我是这样解决的
*.h
//------------定义数组结构--------
typedef struct
{
int index;
AnsiString ip;
int port;
}WhoseIP;

WhoseIP whoseip[20];

*.cpp
//----初始化数组索引
for(int i=0;i<20;i++)
{
whoseip[i].index = i;
}

void __fastcall TMain::ServerSocket1Accept(TObject *Sender,
TCustomWinSocket *Socket)
{
//接受客户端socket是加入数组
for(int i=0;i<20;i++)
{
if((whoseip[i].ip=="")&&(whoseip[i].port==0))
{
whoseip[i].ip = Socket->RemoteAddress;
whoseip[i].port = Socket->RemotePort;
break;
}
}

}



void __fastcall TMain::ServerSocket1ClientRead(TObject *Sender,
TCustomWinSocket *Socket)
{
//确定是那个index
for(int i=0;i<20;i++)
{
if((ip==whoseip[i].ip)&&(port==whoseip[i].port))
{
index = whoseip[i].index;
break;
}
}
}

void __fastcall TMain::ServerSocket1ClientDisconnect(TObject *Sender,
TCustomWinSocket *Socket)
{
//当短线是重新排列数组
for(int i=0;i<20;i++)
{
if((whoseip[i].ip ==Socket->RemoteAddress)&&(whoseip[i].port==Socket->RemotePort))
{
whoseip[i].ip = "";
whoseip[i].port = 0;
break;
}
}
WhoseIP whosetemp[20];
for(int i=0;i<20;i++)
{
whosetemp[i].index = whoseip[i].index;
whosetemp[i].ip = whoseip[i].ip;
whosetemp[i].port = whoseip[i].port;
}
int j=0;
for(int i=0;i<20;i++)
{
if((whosetemp[i].ip!="")&&(whosetemp[i].port!=0))
{
whoseip[j].ip = whosetemp[i].ip;
whoseip[j].port = whosetemp[i].port;
j++;
}
}
for(int k=j;k<20;k++)
{
whoseip[k].ip = "";
whoseip[k].port = 0;
}
}
weixing979 2003-09-10
  • 打赏
  • 举报
回复
楼主太小了,没办法
mme 2003-09-10
  • 打赏
  • 举报
回复
看来楼主基础不行噢。看看书吧!
叶子哟 2003-09-10
  • 打赏
  • 举报
回复
你可以采用自己写一个对应表的方法解决,或是自己单独写一个线程来处理每个客户端的连接,就不会乱了
叶子哟 2003-09-10
  • 打赏
  • 举报
回复
Socket->Connections[COUT]它是变化的,它随着你的客户的连接和断开是不断变化的!所以它与你想像中的对应关系是不一样的!
sun_wyz 2003-09-10
  • 打赏
  • 举报
回复
重赏之下,必有匹夫
三杯倒 2003-09-10
  • 打赏
  • 举报
回复
Socket问题 你看看对应的连接号码
每个客户端上来 自动增加一个连接号码Connection[i]
tongqingchao 2003-09-10
  • 打赏
  • 举报
回复
有没有人呢!!!!!
tongqingchao 2003-09-10
  • 打赏
  • 举报
回复
帮我解决问题吧!!
加载更多回复(14)

1,317

社区成员

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

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