亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

以下情況是關于recvfrom函數的問題,麻煩了解的幫忙解釋一下!謝謝

以下情況是關于recvfrom函數的問題,麻煩了解的幫忙解釋一下!謝謝

楊__羊羊 2021-11-03 07:03:13
int ret;srtuct sockaddr_in from;ret=revcfrom(sock,recvbuf,BUFSIZE,0,(struct sockaddr*)&from,&len))==SOCKET_ERROR from事先不要賦值嗎?通過sock,revcfrom 會把它賦值嗎??書上沒給它賦值,有printf("RECV:'%s FROM <%s>\n'",recvbuf,inet_ntoa(from.sin_addr));
查看完整描述

2 回答

?
搖曳的薔薇

TA貢獻1793條經驗 獲得超6個贊

     recvfrom函數用于從(已連接)套接口上接收數據,并捕獲數據發送源的地址。
  本函數用于從(已連接)套接口上接收數據,并捕獲數據發送源的地址。
  對于SOCK_STREAM類型的套接口,最多可接收緩沖區大小個數據。如果套接口被設置為線內接收帶外數據(選項為SO_OOBINLINE),且有帶外數據未讀入,則返回帶外數據。應用程序可通過調用ioctlsocket()的SOCATMARK命令來確定是否有帶外數據待讀入。對于SOCK_STREAM類型套接口,忽略from和fromlen參數。
  對于數據報類套接口,隊列中第一個數據報中的數據被解包,但最多不超過緩沖區的大小。如果數據報大于緩沖區,那么緩沖區中只有數據報的前面部分,其他的數據都丟失了,并且recvfrom()函數返回WSAEMSGSIZE錯誤。
  若from非零,且套接口為SOCK_DGRAM類型,則發送數據源的地址被復制到相應的sockaddr結構中。fromlen所指向的值初始化時為這個結構的大小,當調用返回時按實際地址所占的空間進行修改。
  如果沒有數據待讀,那么除非是非阻塞模式,不然的話套接口將一直等待數據的到來,此時將返回SOCKET_ERROR錯誤,錯誤代碼是WSAEWOULDBLOCK。用select()或WSAAsynSelect()可以獲知何時數據到達。
  如果套接口為SOCK_STREAM類型,并且遠端“優雅”地中止了連接,那么recvfrom()一個數據也不讀取,立即返回。如果立即被強制中止,那么recv()將以WSAECONNRESET錯誤失敗返回。

查看完整回答
反對 回復 2021-11-07
?
慕田峪9158850

TA貢獻1794條經驗 獲得超7個贊

不需要賦值...recvfrom()應該是UDP通訊的接收函數,一般是socket綁定一個端口,然后就會接收該端口的數據,recvfrom()函數執行的時候,那個from參數輸出的是對方的地址。是一個輸出參數,不是輸入的。

查看完整回答
反對 回復 2021-11-07
  • 2 回答
  • 0 關注
  • 396 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號