我剛剛在遊戲中出現了一些小故障,如果服務器在客戶端之前啓動,但是當客戶端在服務器之前啓動並且它們從不連接時,一切運行正常。這是所有UDPUDP:客戶端在服務器之前啓動
當客戶端在服務器啓動之前嘗試調用recvfrom()時發生問題,此時客戶端永遠找不到服務器,服務器也找不到客戶端。結果錯誤是一個willblock。
如果我停止客戶端使用recvfrom並在服務器之前啓動客戶端(客戶端仍在發送數據,它只是沒有收到它),他們都發現對方沒有問題。
這是什麼解決方案?它現在看起來就是,客戶端不能在沒有服務器處於活動狀態的情況下調用recvfrom,否則這一切都會崩潰。是否有可以檢查數據是否位於某個端口(服務器將發送的數據)的檢查?還是有更好的方法來做到這一點?
一些代碼...
服務器操作 - UDPSocket是一類
UDPSocket.Initialise();
UDPSocket.MakeNonBlocking();
UDPSocket.Bind(LOCALPORT);
int n = UDPSocket.Receive(&thePacket);
if (n > 0)
UDPSocket.Send(&sendPacket);
客戶端...
UDP.Initialise();
UDP.MakeNonBlocking();
UDP.SetDestinationAddress(SERVERIP, SERVERPORT);
serverStatus = UDP.Receive(&recvPacket);
if (serverStatus > 0)
{
//Do some things
UDP.Send(dPacket); //Try and reconnect with server
}
感謝
客戶端和服務器不斷髮送數據到某個端口(客戶端剛剛連接到本地IP),如前所述,這隻有在客戶端在服務器之前打開時纔會中斷。我不明白爲什麼會導致服務器或客戶端沒有收到任何數據 – Chris
某些僞代碼或最小的實際「破碎」代碼在這裏會有所幫助。您的兩個程序如何交互還不完全清楚。 –
添加網絡代碼希望它有意義 – Chris