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

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

請問在vc socket中,有什么辦法可以讓recv返回0值嗎?

請問在vc socket中,有什么辦法可以讓recv返回0值嗎?

C C++
波斯汪 2021-11-03 11:07:45
一個阻塞的tcp/ip文件傳輸程序,當我發送端read()為0時退出發送函數模塊,send()函數也正常返回0了,但是接收端一定要等到發送端的closesocket()函數運行完之后recv()函數才返回0,否則就一直卡在recv()那里。求用什么辦法可以在不關閉接收端socket的情況下recv正常返回0好讓我的程序正常退出?我做一個多文件的網絡傳輸,用阻塞式的TCP/IP套接字,請問怎么用select()函數判斷每次發完一個文件再發另外一個?現在的問題很令人痛苦,接收端每次都不能正常返回,要不然就是recv()卡住,要不然就是send那邊把其他文件的字節也傳到recv端第一個文件里面。
查看完整描述

3 回答

?
白豬掌柜的

TA貢獻1893條經驗 獲得超10個贊

首先可以將RECV函數設置為非阻塞模式。這個就不多說了。
對于另一個問題,發送端每次發送的字節數要和接收端每次接收的內容大小一致。比如接收端每次收4K,發送端也必須是每次發4K,如果發送的內容實際小于4K,就用空字符補。

查看完整回答
反對 回復 2021-11-07
?
繁星點點滴滴

TA貢獻1803條經驗 獲得超3個贊

你可以用異步的IO模式,比如select模式,overlappped模式,事件模式,甚至IOCP。這樣就不會存在recv被卡住的問題了,性能也極大的提高。
同步的recv返回0,表示連接正常關閉, 你想讓recv返回0卻保持連接這是很難的。

查看完整回答
反對 回復 2021-11-07
?
汪汪一只貓

TA貢獻1898條經驗 獲得超8個贊

用select測試.
select功能很強, 但用起來有點復雜, 很多人說它不好用, 其實是不會用, 希望你別說它不好用.
======================================================
不論是不是Blocking模式, select都可以用來檢測:
1)連接是否成功;
2)是不是可以發送;
3)是不是可以接收;
4)對方是否斷開連接

=====================================================
"send那邊把其他文件的字節也傳到recv端第一個文件里"
你的程序設計的問題, 和socket怎么用無關.



查看完整回答
反對 回復 2021-11-07
  • 3 回答
  • 0 關注
  • 496 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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