第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定

silverlight中的socket編程注意事項(xiàng)

標(biāo)簽:
C#

1.粘包

目前sl中的socket只能用tcp/ip协议,而tcp/ip本质是一个"流"协议,也就是说数据无边界,发送的就是一连串的字节(没有数据包的概念),因此连续发送时有所谓的“粘包”现象,详细解释如下:

比如你设置发送缓冲区的大小是512字节,如果(在相隔时间极短的情况下)连续发送次数据,第一次为500字节,第二次为100字节,实际上你在服务器端接收到的二次数据长度并不是500和100,而是512和88.

换言之:如果socket能“感觉”到马上还有数据要发送,而且在本次发送的缓冲区还有空余时,它会自动把下次发送的内容挪一部分过来,直到本次缓冲区填满,以便有效的利用缓冲区,减少发送次数,至于它是如何感觉的,我就不知道鸟:)


所以如果想正确的划清数据边界,得自己想办法封包/拆包

 

常见的解决办法:在发送方与接收方制定一个共同的约定,比如定义一个结构体struct,把“包长度,包序号,要发送的数据,包的唯一标识...”这一堆东西封装在struct中,然后通过序列化最终得到一个byte[]进行发送。

 

另外如果最终得到的byte[]太大,超过了数据下标所允许的最大值(比如传递大文件时),会导致接收时反序列化失败,所以还得人工把大块头数据割成一块一块,这里有一个技巧:为了避免前面提到“scoket自我感觉良好”进行的数据挪移,分割的单位建议正好就是缓冲区的大小,如果不足一个缓冲区,宁可凑数填写一些空字节也要凑满一个缓冲区长度--这样系统会觉得你在高效使用缓冲区,没有浪费,也就不会管闲事了 :)

 

2.异常捕获

网络编程中,会有各种不可控的情况,所以异常的捕获很重要,否则程序会用着用着就挂掉了。

 

3.异常数据包的及时清理

异常数据包指“非法的”或“不完整的(比如一个大文件最终拆分成10个包,结果第10个包都收到了,前面的某个包即始终收不到)”数据包,对于这类数据包,要及时清理否则会一直占用资源(必要时可以将连接关闭)。

點(diǎn)擊查看更多內(nèi)容
TA 點(diǎn)贊

若覺得本文不錯(cuò),就分享一下吧!

評(píng)論

作者其他優(yōu)質(zhì)文章

正在加載中
  • 推薦
  • 評(píng)論
  • 收藏
  • 共同學(xué)習(xí),寫下你的評(píng)論
感謝您的支持,我會(huì)繼續(xù)努力的~
掃碼打賞,你說多少就多少
贊賞金額會(huì)直接到老師賬戶
支付方式
打開微信掃一掃,即可進(jìn)行掃碼打賞哦
今天注冊(cè)有機(jī)會(huì)得

100積分直接送

付費(fèi)專欄免費(fèi)學(xué)

大額優(yōu)惠券免費(fèi)領(lǐng)

立即參與 放棄機(jī)會(huì)
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)

舉報(bào)

0/150
提交
取消