成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

c語言recv函數(shù)的用法,c語言ret函數(shù)

recv函數(shù) 怎么判斷接收結(jié)束

recv函數(shù)怎么判斷接收結(jié)束:

創(chuàng)新互聯(lián)建站于2013年成立,是專業(yè)互聯(lián)網(wǎng)技術(shù)服務(wù)公司,擁有項(xiàng)目成都做網(wǎng)站、網(wǎng)站建設(shè)、外貿(mào)營銷網(wǎng)站建設(shè)網(wǎng)站策劃,項(xiàng)目實(shí)施與項(xiàng)目整合能力。我們以讓每一個夢想脫穎而出為使命,1280元秦安做網(wǎng)站,已為上家服務(wù),為秦安各地企業(yè)和個人服務(wù),聯(lián)系電話:18982081108

1、例如在數(shù)據(jù)流中帶個結(jié)束標(biāo)識,那樣讀到結(jié)束標(biāo)識就知道傳輸完成,停止。 這種方法只能用傳輸文本文件,有個文件結(jié)束符,二進(jìn)制文件不行。

2、先傳個長度,那么接收方就可以控制 接下來要讀取多少個字節(jié)的數(shù)據(jù)才算完成。這個適合傳輸任何文件。

例子:

C/C++ code

client的發(fā)函數(shù)為:char line[MAXLINE]; while ((fgets(line,MAXLINE,fd)!=NULL) // fd 為一個文件的指針 {send (connfd, line,strlen(line),0) // connfd為 socket}server 的接收函數(shù)為:for (;;) {if ((n=recv(connfd, recvline,MAXLINE,0)0) {recvline[n]=0;fputs(stdout,recvline);else break;}}

當(dāng)發(fā)端停止發(fā)送后,收端無法得知數(shù)據(jù)已經(jīng)傳輸完畢,從而一直在for中死循環(huán),可以用以上方法判斷接收結(jié)束。

C++ recv函數(shù)的問題

因?yàn)榉?wù)器是一對多客戶端;

而對于客戶端來說,是1對1服務(wù)器;

所以,服務(wù)器在等待某個客戶端的時(shí)候,去執(zhí)行其他客戶端的請求。

c語言的recv()非阻塞方法怎么弄哦

需要將recv設(shè)置超時(shí),Linux下設(shè)置超時(shí)如下:

//設(shè)置發(fā)送超時(shí)

struct timeval timeout={3,0};//3s

setsockopt(socket,SOL_SOCKET,SO_SNDTIMEO,(char *)timeout,sizeof(struct timeval));

//設(shè)置接收超時(shí)

setsockopt(socket,SOL_SOCKET,SO_RCVTIMEO,(char *)timeout,sizeof(struct timeval));

windows下設(shè)置超時(shí)如下:

int timeout = 3000; //3s

int ret=setsockopt(sock_fd,SOL_SOCKET,SO_SNDTIMEO,timeout,sizeof(timeout));

int ret=setsockopt(sock_fd,SOL_SOCKET,SO_RCVTIMEO,timeout,sizeof(timeout));

c語言如何檢測網(wǎng)絡(luò)是否連接

1、如果對方斷開連接的話,那么readNum = recv ( socketId, rcvBuf, rcvBufSize, 0 );

readNum返回值應(yīng)該是0,可以根據(jù)返回值判斷。

2、recv函數(shù)返回值說明

recv函數(shù)

int recv( SOCKET s, char FAR *buf, int len, int flags);

不論是客戶還是服務(wù)器應(yīng)用程序都用recv函數(shù)從TCP連接的另一端接收數(shù)據(jù)。該函數(shù)的第一個參數(shù)指定接收端套接字描述符; 第二個參數(shù)指明一個緩沖區(qū),該緩沖區(qū)用來存放recv函數(shù)接收到的數(shù)據(jù); 第三個參數(shù)指明buf的長度; 第四個參數(shù)一般置0。

這里只描述同步Socket的recv函數(shù)的執(zhí)行流程。當(dāng)應(yīng)用程序調(diào)用recv函數(shù)時(shí),

(1)recv先等待s的發(fā)送緩沖中的數(shù)據(jù)被協(xié)議傳送完畢,如果協(xié)議在傳送s的發(fā)送緩沖中的數(shù)據(jù)時(shí)出現(xiàn)網(wǎng)絡(luò)錯誤,那么recv函數(shù)返回SOCKET_ERROR,

(2)如果s的發(fā)送緩沖中沒有數(shù)據(jù)或者數(shù)據(jù)被協(xié)議成功發(fā)送完畢后,recv先檢查套接字s的接收緩沖區(qū),如果s接收緩沖區(qū)中沒有數(shù)據(jù)或者協(xié)議正在接收數(shù) 據(jù),那么recv就一直等待,直到協(xié)議把數(shù)據(jù)接收完畢。當(dāng)協(xié)議把數(shù)據(jù)接收完畢,recv函數(shù)就把s的接收緩沖中的數(shù)據(jù)copy到buf中(注意協(xié)議接收到的數(shù)據(jù)可能大于buf的長度,所以 在這種情況下要調(diào)用幾次recv函數(shù)才能把s的接收緩沖中的數(shù)據(jù)copy完。recv函數(shù)僅僅是copy數(shù)據(jù),真正的接收數(shù)據(jù)是協(xié)議來完成的), recv函數(shù)返回其實(shí)際copy的字節(jié)數(shù)。如果recv在copy時(shí)出錯,那么它返回SOCKET_ERROR;如果recv函數(shù)在等待協(xié)議接收數(shù)據(jù)時(shí)網(wǎng)絡(luò)中斷了,那么它返回0。 默認(rèn) socket 是阻塞的 解阻塞與非阻塞recv返回值沒有區(qū)分,都是 0 出錯 =0 連接關(guān)閉 0 接收到數(shù)據(jù)大小,

特別:返回值0時(shí)并且(errno == EINTR || errno == EWOULDBLOCK || errno == EAGAIN)的情況下認(rèn)為連接是正常的,繼續(xù)接收。只是阻塞模式下recv會阻塞著接收數(shù)據(jù),非阻塞模式下如果沒有數(shù)據(jù)會返回,不會阻塞著讀,因此需要循環(huán)讀取)。

返回說明: 成功執(zhí)行時(shí),返回接收到的字節(jié)數(shù)。另一端已關(guān)閉則返回0。失敗返回-1,errno被設(shè)為以下的某個值 EAGAIN:套接字已標(biāo)記為非阻塞,而接收操作被阻塞或者接收超時(shí) EBADF:sock不是有效的描述詞 ECONNREFUSE:遠(yuǎn)程主機(jī)阻絕網(wǎng)絡(luò)連接 EFAULT:內(nèi)存空間訪問出錯 EINTR:操作被信號中斷 EINVAL:參數(shù)無效 ENOMEM:內(nèi)存不足 ENOTCONN:與面向連接關(guān)聯(lián)的套接字尚未被連接上 ENOTSOCK:sock索引的不是套接字 當(dāng)返回值是0時(shí),為正常關(guān)閉連接;

思考:當(dāng)對側(cè)沒有send,即本側(cè)的套接字s的接收緩沖區(qū)無數(shù)據(jù),返回值是什么(EAGAIN,原因?yàn)槌瑫r(shí),待測)

文章題目:c語言recv函數(shù)的用法,c語言ret函數(shù)
標(biāo)題鏈接:http://jinyejixie.com/article14/hseege.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供移動網(wǎng)站建設(shè)、網(wǎng)站維護(hù)外貿(mào)建站、云服務(wù)器、虛擬主機(jī)App開發(fā)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

h5響應(yīng)式網(wǎng)站建設(shè)
富民县| 古田县| 白水县| 搜索| 怀仁县| 灵宝市| 东宁县| 茌平县| 缙云县| 原平市| 珠海市| 古蔺县| 安仁县| 泉州市| 凤台县| 元朗区| 五台县| 河池市| 奉贤区| 故城县| 彭山县| 宝丰县| 渭源县| 长丰县| 汝州市| 迭部县| 临西县| 休宁县| 孝感市| 六盘水市| 漠河县| 宜春市| 三台县| 冕宁县| 玉田县| 大港区| 互助| 南郑县| 广汉市| 鹿泉市| 兴宁市|