解决这个问题我给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,这个问题怎么解决呢!!
...全文
4 点赞 收藏 34
写回复
34 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
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
帮我解决问题吧!!
回复
相关推荐
发帖
网络及通讯开发
创建于2007-08-02

1299

社区成员

C++ Builder 网络及通讯开发
申请成为版主
帖子事件
创建了帖子
2003-09-10 07:12
社区公告
暂无公告