我正在嘗試使用UDP來實現基本的文件傳輸協議。 我使用Beej's Guide作爲參考,我將發佈的大部分代碼都是從那裏發佈的。雙向UDP客戶端和服務器?
我的程序到目前爲止都有'講話者'發送它想要的'接收'文件的名稱。
從那裏,接收器檢查文件是否存在,如果存在,它會計算出文件的大小。
現在,這裏是我遇到問題的地方。我需要接收器將文件的大小發送給發言者。你可以在我的代碼(下面的鏈接)中看到我是如何實現它的。然而,談話者只是掛起,就像仍在等待發送內容。
這讓我覺得接收者需要一些額外的代碼來允許它與講話者進行通信,而不僅僅是從它接收數據(我習慣了TCP,所以原諒我缺乏知識)。
有人能告訴我我缺少什麼代碼,或者如果我使用的功能錯誤? Beej的指導很難遵守,他沒有提供雙向交流的例子。
謝謝,讓我知道如果你需要任何更多的信息。
監聽器:http://pastebin.com/UL1xjDnP
發話:http://pastebin.com/B2zrXPgZ
編輯:解決了! 感謝cnicutar,
我解決了服務器在這段代碼的時候我應該已經解決了客戶端
if ((numbytes = sendto(sockfd,buffer,strlen(buffer), 0, p->ai_addr, p->ai_addrlen)) == -1)
應改爲
if ((numbytes = sendto(sockfd,buffer,strlen(buffer), 0, (struct sockaddr *)&their_addr, &addr_len)) == -1)
就是「監聽器」報告「監聽器:文件大小已發送」? – cnicutar
我想知道爲什麼UDP? TCP是一個更好的傳輸文件的協議。 UDP不提供諸如順序傳送,重新發送損壞的數據等等,這些在傳輸文件時是關鍵。 –
是的,監聽者正在報告文件大小已被髮送。 另外我想學習UDP,我認爲知道兩者都很有價值。 – user974703