[問題] C SOCKET 卡住 Help!!!
各位高手好!!!
想請益,我自己在寫C Socket 時
我有Server-Cliner連線,當Server send 1個byte資料時
過一段時間Client才收到,又有時候會一傳送馬上收到!!!
還有另外一種狀況是,我 recv 速度很快收到好幾筆資料後(正常應該要這樣子)
但又卡住一陣子,又感覺順了連續收到好幾筆,之後又卡住一段時間沒收到東西
之後又收到連續幾筆後又卡住了!!!
請問有這種經驗的大大嗎 可以分享一下大概是哪方面出了問題
以下提供 我自己寫的 有怪怪的地方請指正 因為是這方面新手 都剪剪貼貼!!
Server 端 CODE 網址 http://codepad.org/CxpgQkSH
Client 端 CODE 網址 http://codepad.org/yoinQcP0
以下為Client端 Code
//---------------------------------
for(;;){
if((sockfd = socket(AF_INET, SOCK_STREAMNC, IPPROTO_TCP)) < 0)goto leave;
bzero( &serv_addr, sizeof(struct sockaddr_in) );
serv_addr.sin_family = AF_INET;
serv_addr.sin_port = htons(2400);
serv_addr.sin_len = sizeof( serv_addr );
serv_addr.sin_addr.s_addr = inet_addr(SERVIP);
testarg=2;
if(connect(sockfd, (PSA)&serv_addr, sizeof(serv_addr)) != 0)goto leave;
Slavetimeout.tv_sec = 0 ;
Slavetimeout.tv_usec = 5 ;
setsockopt (sockfd, SOL_SOCKET, SO_RCVTIMEO, (char
*)&Slavetimeout,sizeof(Slavetimeout));
setsockopt (sockfd, SOL_SOCKET, SO_SNDTIMEO, (char
*)&Slavetimeout,sizeof(Slavetimeout));
for(;;){
if( recv( sockfd, clientflagC, 1, 0 ) <= 0 )goto leave ;
if( recv( sockfd,TraceObjectMC, 1, 0 ) <= 0 )goto leave ;
if( send( sockfd,TraceObjectSC, 1, 0 ) <= 0 )goto leave ;
if(clientflagC[0]==2){
//同步控制-----------------------
SynTimeC[0]=2;
if( send( sockfd, SynTimeC, 1, 0 ) <= 0 )goto leave ;//連線建立準備同步
*Clientptr=0;
clientflagC[0]=0;
goto leave;
}//end2
if(clientflagC[0]==3){
if(SendObjArgindexCount<= RSendObjArgindexCount){
SendObjArg[0]=RSendObjArg[SendObjArgindex][0];
SendObjArg[1]=RSendObjArg[SendObjArgindex][1];
SendObjArg[2]=RSendObjArg[SendObjArgindex][2];
if( send( sockfd, SendObjArg, 3, 0 ) <= 0 )
{
goto leave ;
}
SendObjArgTime[0]=RSendObjArgTime[SendObjArgindex][0];
SendObjArgTime[1]=RSendObjArgTime[SendObjArgindex][1];
SendObjArgTime[2]=RSendObjArgTime[SendObjArgindex][2];
if( send( sockfd, SendObjArgTime, 3, 0 ) <= 0 )
{
goto leave ;
}
SendObjArgXY[0]=RSendObjArgXY[SendObjArgindex][0];
SendObjArgXY[1]=RSendObjArgXY[SendObjArgindex][1];
SendObjArgXY[2]=RSendObjArgXY[SendObjArgindex][2];
if( send( sockfd, SendObjArgXY, 3, 0 ) <= 0 )
{
goto leave ;
}
SendObjArgindexCount++;
if(SendObjArgindex<99)SendObjArgindex++;
else SendObjArgindex=0;
}
}//end 3
}
leave:
shutdown(sockfd,2);
fdClose( sockfd );
sockfd = INVALID_SOCKET;
//TaskBlock( TaskSelf() );
//fdCloseSession( (HANDLE)TaskSelf() );
}//end for
排版有點爛!! 抱歉
困擾我好久 希望大大指點!!!
或私下教我 感謝!~
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 36.224.76.92
→
01/04 01:27, , 1F
01/04 01:27, 1F
※ 編輯: Liang8057 來自: 36.224.76.92 (01/04 01:29)
※ 編輯: Liang8057 來自: 36.224.76.92 (01/04 01:34)
推
01/04 10:11, , 2F
01/04 10:11, 2F
→
01/04 10:11, , 3F
01/04 10:11, 3F
推
01/04 10:14, , 4F
01/04 10:14, 4F
推
01/04 13:55, , 5F
01/04 13:55, 5F
→
01/04 13:55, , 6F
01/04 13:55, 6F
→
01/06 10:51, , 7F
01/06 10:51, 7F
→
01/10 17:12, , 8F
01/10 17:12, 8F
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章