1. 程式人生 > >tcp和udp

tcp和udp

解決 數據 linux backlog 說了 listen 處理 跨網段 windows

多網卡
1 機器跨網段
2 網卡綁定

TCP和UDP

tcp基於鏈接通信
1 基於鏈接,則需要listen(backlog),指定連接池的大小
2 基於鏈接,必須先運行服務端,然後客戶端發起鏈接請求
3 對於mac系統:如果一端斷開了鏈接,那另外一端的鏈接也跟著完蛋recv將不會阻塞,收到的是空(解決方法是:服務端在收消息後加上if,空消息就break掉通信循環)
4 對於windows/linux系統:如果一端斷開了鏈接,那另外一端的鏈接也跟著完蛋recv將不會阻塞,收到的是空,異常(解決方法是:服務端通信循環內加異常處理)

udp無鏈接
1 無鏈接,因而無需listen(backlog),更加沒有連接池之說了
2 無鏈接,udp的sendto不用管是否有一個正在運行的服務端,可以己端一個勁的發消息,只不過消息丟失
3 recvfrom收的數據小於sendto發送的數據時,在mac和linux系統上數據直接丟失,在windows系統上發送的比接收的大直接報錯
4 只有sendto發送數據沒有recvfrom收數據,數據丟失

tcp和udp