linux c tcp服務帶超時處理的c s

2021-08-30 23:05:27 字數 3409 閱讀 6159

1.server

deepfuture@deepfuture-laptop:~/private/mytest$ ./testtcps

server wait....

server read :deepfuture.iteye.com

server send :hello

server read :deepfuture.iteye.com

server send :hello

2.client

deepfuture@deepfuture-laptop:~/private/mytest$ ./testtcpc

client send....

client send :deepfuture.iteye.com

client read :hello

deepfuture@deepfuture-laptop:~/private/mytest$ ./testtcpc

client send....

client send :deepfuture.iteye.com

client read :hello

deepfuture@deepfuture-laptop:~/private/mytest$ 

3.source

1)server

#include #include #include #include #include 

ssize_t readn(int fd,void *ptr,size_t maxcn)

else //無法修復錯誤,返回讀取失敗

}else if(readcn==0) break;//eof

noreadcn-=readcn;//讀取成功,但是如果讀取的字元數小於maxc,則繼續讀,因為可能資料還會繼續通過網路送過來

buf+=readcn;

if (*buf==0) break;//如果讀到字串結尾標誌則退出,必須有這句,否則會死迴圈

} return (maxcn-noreadcn);

}ssize_t writen(int fd,void *ptr,size_t maxcn)

else //無法修復錯誤,返回讀取失敗

}nowritecn-=writecn;

buf+=writecn;

} return (maxcn-nowritecn);

}int main(void)

//bind 到socket fd

address.sin_family=af_inet;//ipv4協議,af_inet6是ipv6

address.sin_addr.s_addr=htonl(inaddr_any);//l表示32位,htonl能保證在不同cpu的相同位元組序

address.sin_port=htons(1253);//埠號,s表示16位

addresslen=sizeof(address);

bind(fd,(struct sockaddr *)&address,addresslen);//bind

//建立socket佇列,指定最大可接受連線數

rc=listen(fd,32);//最多接收32個連線,開始監聽

//int listen(int sockfd, int backlog)返回:0──成功, -1──失敗

//核心會在自己的程序空間裡維護乙個佇列以跟蹤這些完成的連線但伺服器程序還沒有接手處理或正在進行的連線

if (rc==-1)

printf("server wait....\n");

while(1)

//等待連線,使用新的程序或執行緒來處理連線

fflush(stdout);

address_len=sizeof(clientaddress);

if(fd_isset(fd,&fdset))

if (pid==0)

else

}else

}}

2) client

#include #include #include #include #include 

ssize_t readn(int fd,void *ptr,size_t maxcn)

else //無法修復錯誤,返回讀取失敗

}else if(readcn==0) break;//eof deepfuture.iteye.com

noreadcn-=readcn;//讀取成功,但是如果讀取的字元數小於maxc,則繼續讀,因為可能資料還會繼續通過網路送過來

buf+=readcn;

if (*buf==0) break; //如果讀到字串結尾標誌則退出,必須有這句,否則會死迴圈 deepfuture.iteye.com

}

return (maxcn-noreadcn);

}ssize_t writen(int fd,void *ptr,size_t maxcn)

else //無法修復錯誤,返回讀取失敗

}nowritecn-=writecn;

buf+=writecn;

} return (maxcn-nowritecn);

}int main(void)

printf("client send....\n");

fflush(stdout);

//連線

address.sin_family=af_inet;//ipv4協議,af_inet6是ipv6 deepfuture.iteye.com

address.sin_addr.s_addr=inet_addr("127.0.0.1");//l表示32位,htonl能保證在不同cpu的相同位元組序

address.sin_port=htons(1253);//埠號,s表示16位 deepfuture.iteye.com

addresslen=sizeof(address);

rc=connect(fd,(struct sockaddr *)&address,addresslen);//連線伺服器 deepfuture.iteye.com

if (rc==-1)

//傳送資料

writen(fd,(void *)buf,strlen(buf)+1);

printf("client send :%s\n",buf);

//讀取資料

bzero(mybuf,100);

readn(fd,(void *)mybuf,100);

printf("client read :%s\n",mybuf);

close(fd);

exit(0);

}

Spring Cloud feign 服務超時處理

spring cloud中,feign和ribbon在整合了hystrix後,可能會出現首次呼叫失敗的問題 造成該問題的原因 hystrix預設的超時時間是1秒,如果超過這個時間尚未響應,將會進入fallback 而首次請求往往會比較慢 因為spring的懶載入機制,要例項化一些類 這個響應時間可能...

httpClient請求超時的設定以及處理

設定超時的起因 在我們的httpclient請求,當我們的請求位址錯誤或者請求無法在正常時間內連線並且得到反饋抑或是我們的伺服器正處在關閉維修的狀態 這時,我們傳送httpclient請求的客戶端會因為執行緒中一直在等待我們請求的反饋資訊而造成程序阻塞。如果這時候我們不做任何處理會造成客戶端無反應 ...

Hessian 2 Hessian連線超時處理

hessian作為乙個遠端連線工具,必然存在連線超時等問題,如果不對連線超時等引數進行相關的設定,當網路出現問題後就會造成整個hessian處理的阻塞,進而阻塞整個執行緒後續的處理。目前,hessian客戶端遠端呼叫webservice主要採用了以下工具類 1 hessian的hessianprox...