动态生成clientsocket的问题

jxhywdh 2006-08-01 05:32:39
typedef struct {
char *pri;
TCustomWinSocket *Socket;
TClientSocket *clientsocket;
char *next;
}
SOCKSTRUCT;

SOCKSTRUCT *head,*curr;

ServerSocket1->Active=true;
int l=sizeof(SOCKSTRUCT);
char *buf,*buf1;

buf=(char *)malloc(l+1);
head=(SOCKSTRUCT *)buf;
curr=head;
head->pri=NULL;
head->next=NULL;

}

void __fastcall TForm1::ServerSocket1ClientConnect(TObject *Sender,
TCustomWinSocket *Socket)
{

SOCKSTRUCT *newsock ;
int l=sizeof(SOCKSTRUCT);
char *buf;
buf=(char *)malloc(l+1);
newsock=(SOCKSTRUCT *)buf;

TClientSocket *clientsocket;
clientsocket=new TClientSocket(NULL);
clientsocket->Host="127.0.0.1";
clientsocket->Port=19001;
clientsocket->ClientType=ctNonBlocking;

clientsocket->OnRead=myclientsocketread;
clientsocket->Active=true;


curr=head;
while(curr->next!=NULL) curr=(SOCKSTRUCT *)curr->next;
newsock->pri=(char *)curr;
newsock->next=NULL;
newsock->Socket=Socket;
newsock->clientsocket=clientsocket;
curr->next=(char *)newsock;
curr=newsock;
AnsiString sql;
sql=Socket->RemoteAddress+":";
sql=sql+(AnsiString)Socket->RemotePort;
Memo1->Lines->Add("Socket add from "+sql);

}



void __fastcall TForm1::ServerSocket1ClientDisconnect(TObject *Sender,
TCustomWinSocket *Socket)
{

SOCKSTRUCT *pri,*next ;

curr=(SOCKSTRUCT *)head->next;
while(1) {
if(curr->Socket==Socket)
{
curr->clientsocket->Active=false;
pri=(SOCKSTRUCT *)curr->pri;
if(curr->next==NULL) {
pri->next=NULL;
}
else{
pri->next=curr->next;
}


Memo1->Lines->Add("Socket delete");
free(curr);
return;
}
if(curr->next==NULL) return;
curr=(SOCKSTRUCT *)curr->next;
}

}



void __fastcall TForm1::ServerSocket1ClientRead(TObject *Sender,
TCustomWinSocket *Socket)
{


char buff[40000];
int i=Socket->ReceiveLength() ;
Socket->ReceiveBuf(buff,i);
Memo1->Lines->Add("server receive :"+(AnsiString)buff) ;
SOCKSTRUCT *tt;
tt=(SOCKSTRUCT *)head;
while(tt->next!=NULL) {
tt=(SOCKSTRUCT *)tt->next;
if(tt->Socket==Socket) {
Memo1->Lines->Add("now send to htserver :"+(AnsiString)buff+" len="+(AnsiString)i) ;
/*******************************************************************/
/*** 下面必须要这个IF ELSE 要有 ShowMessage否则 不能传送包


***********************************************************/
if(tt->clientsocket->Active==true)
ShowMessage(" true");
else ShowMessage(" false");

int j;
j=tt->clientsocket->Socket->SendBuf(buff,i) ;
}

}

}



void __fastcall TForm1::myclientsocketread(TObject *sender,TCustomWinSocket *socket)
{

TClientSocket *clientsocket;
clientsocket=(TClientSocket *)sender;

char buf[40000];
int len=socket->ReceiveLength();
int j=socket->ReceiveBuf(buf,len);
int k;
Memo1->Lines->Add("on client read:"+(AnsiString)buf);

SOCKSTRUCT *newsock ,*pri,*next ;
int l=sizeof(SOCKSTRUCT);
char *buff;
buff=(char *)malloc(l+1);
newsock=(SOCKSTRUCT *)buff;

curr=(SOCKSTRUCT *)head->next;
while(1) {
if(curr->clientsocket==clientsocket)
{
curr->Socket->SendBuf(buf,len) ;
// curr=(SOCKSTRUCT *)curr->next;
}
if(curr->next==NULL) break;
else
{

curr=(SOCKSTRUCT *)curr->next;
}

}

}
...全文
249 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
yz20050510 2006-08-29
  • 打赏
  • 举报
回复
关注!
jxhywdh 2006-08-02
  • 打赏
  • 举报
回复
已解决
jxhywdh 2006-08-01
  • 打赏
  • 举报
回复
void __fastcall TForm1::ServerSocket1ClientRead(TObject *Sender,
TCustomWinSocket *Socket)
这个函数中
/*******************************************************************/
/*** 下面必须要这个IF ELSE 要有 ShowMessage否则 不能传送包


***********************************************************/
if(tt->clientsocket->Active==true)
ShowMessage(" true");
else ShowMessage(" false");

int j;
j=tt->clientsocket->Socket->SendBuf(buff,i) ;


要如何设置呀 我这个程序是转发包用的 从ServerSocket1收到后再动态生成CLIENTSOCKET 现在现在如果没有上面的IF ELSE 则 j=tt->clientsocket->Socket->SendBuf(buff,i) ;
j=0 不能传送包????

1,317

社区成员

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

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