大家请进,对于你们来说小事一桩
高手们:
近几天,我给多线程与TCP搞的头都大了,请救救我:
主程序:
err = WSAStartup( wVersionRequested, &wsaData );
sock = socket ( AF_INET,SOCK_STREAM,0);
err = bind (sock,(sockaddr *)&name,sizeof(name) );
err = listen (sock, 5);
.....................
然后建立了侦听线程: Tqidend1Thread
void __fastcall Tqidend1Thread::Change()
{ TqifsendThread *all1 = new TqifsendThread(v_sock,false);
all1->Resume();
all1->Terminate();}
void __fastcall Tqidend1Thread::Execute()
{ int len;
do {
len = sizeof( name1);
v_sock = accept( sock1, (struct sockaddr *)&name1, &len );
if(v_sock==-1){
continue;}
Synchronize(Change); }
while (!Terminated); }
在侦听线程里再建一个接受发送数据的线程 TqifsendThread
void __fastcall TqifsendThread::Execute()
{
do{ rc = RecvTcp(sock,buf,256,300);
if( rc < 0 )
{ MessageBox ( NULL, "recv fail", temp, MB_OK );
break; }
rc = SendTcp(sock,buf,256,300);
// Synchronize(Change);
} while(Terminated);
closesocket ( sock );
}
再起一个客户端向之循环发数据,但发了几次后客户端就connect出错。并且关闭客户端与服务端程序时只能先关闭服务端程序否则服务端就出现无数次接受出错。
。。。。。。。。请帮一下忙。拜托大家,解救我!