剛開始遇到這個問題時有點懵,UDP為什麼還有分啟動順序?看一下我遇到的錯誤: 先啟動serevr,再啟動client,雙方不管誰先發消息,正常; 先啟動server,再啟動client,之後關閉client,不關閉server,重新再啟動client,client先發消息異常, 先啟動client, ...
剛開始遇到這個問題時有點懵,UDP為什麼還有分啟動順序?看一下我遇到的錯誤:
- 先啟動serevr,再啟動client,雙方不管誰先發消息,正常;
- 先啟動server,再啟動client,之後關閉client,不關閉server,重新再啟動client,client先發消息異常,
- 先啟動client,再啟動server,client先發消息,同樣報上面的錯誤;
仔細檢查了代碼之後,發現ClientEnd的IP埠都是0,哦!我原來在和假地址交流。
接著就查找其為什麼是0,發現server建立好時候的問候(發消息建立通訊),client還在睡覺(還沒有啟動) 然後就找度娘搜索答案,發現改Hosts或者IP都試了好像沒什麼用處,SO就想辦法怎麼能夠讓client起床(啟動)之前,server一直叫它呢(嘗試建立通訊)?由於才接觸UDP,我這裡想到的是一個笨方法,大牛可以略過,熱心的話可以教一下萌新更高效的辦法,十分感謝。
本人解決辦法:
首先要明白只是Client向Server發消息會出現這些問題,Server向Client發送消息完全沒問題。
UDP不連接單發消息是不會有問題的。重載server的send方法,發送特殊標記(項目中一定用不到的字元)到client,判斷client是否接收了,如果接受返回標記到server,改變發送狀態。斷線亦是如此。
Server:
檢測寫在Receive();
Client: