1樓:匿名使用者
樓上已經把如何建立socket說明了,我只講一下資料封裝和傳輸過程:
1、udp 137服務已經啟動,並且會迴應接受的資料包;
2、傳送端的應用準備傳送的資料;
3、呼叫socket,指明目標地址和埠(137),源地址和埠可以指定,也可以忽略;
4、socket封裝udp包,增加udp包頭,進而封裝ip包,增加ip包頭;
5、socket呼叫底層驅動(鏈路層),將ip包封裝成物理鏈路上傳輸的幀,以乙太網為例,會增加幀頭,包括源mac和目標mac,當然中間會用到arp,解析出ip和mac的對應關係,由協議棧完成,應用可以不必理會;
6、底層的資料幀通過物理鏈路傳輸到對方;
7、對方接收後,反過來從底層向上層,逐漸剝去幀頭、ip頭、udp頭,得到實際的資料,並根據udp頭部的目標埠,傳送給上層的應用,137埠服務;
8、137埠服務處理後,反後頭來,傳送迴應資料,傳送過程同上。
2樓:專業保證
udp採用的是無連線、不可靠的資料包協議。服務端定義一個接受埠(137)然後無限迴圈等待接受資料。
首先建立一個sock套接 socket型別自然就是 sock_dgram。
然後設定埠 sin_port=htons(137)然後設定接收地址 一般都是(inaddr_any)就是任何地址的。你可以設定只接受一個地址。
繫結 把你的sock與你的ip繫結起來。
監聽,然後就無限迴圈等待接收。
如果有人傳送資料包過來,並且滿足條件,他就接受資料,然後處理。
條件: 埠號,伺服器ip udp 如果都滿足 就接受。
客服端 建立sock,然後繫結,然後給服務端傳送資料包。
大體流程就這樣了,我不知道你**不明白。
3樓:匿名使用者
成8000開著的話,那現成b10000就不會接到8000埠的資訊了.ok,誰沒有事自己發自己內容啊,暈.建議c監視8000一直開著,這樣b就收不到自己的8000了,或者你自己判斷,弄個協議啊嘿嘿,比如說發來的文字的第一行表示是需要發到哪個埠的,拿出來判斷下是否對就行了,再說,你得將自己發給自己的socket事先判斷出來或者接收到後看ip相同就不處理ok
另外,團idc網上有許多產品**,便宜有口碑
為什麼udp傳送和接收的埠號必須一致? 5
4樓:娛樂小八卦啊
客戶端不需要固定埠,客戶端傳送訊息時應該由udpclient自動選擇可用的埠。
伺服器不可能向nat內部的客戶端主動發起訊息,必須等客戶端傳送訊息,然後趕緊傳送返回值。因為nat路由器只會為udp訊息的這種回發規則維護一個較短時間,在這個較短時間上由外部發來的訊息才能被路由器正確**給內部。
擴充套件資料
udp是osi參考模型中一種無連線的傳輸層協議,它主要用於不要求分組順序到達的傳輸中,分組傳輸順序的檢查與排序由應用層完成,提供面向事務的簡單不可靠資訊傳送服務。udp 協議基本上是ip協議與上層協議的介面。udp協議適用埠分別執行在同一臺裝置上的多個應用程式。
udp提供了無連線通訊,且不對傳送資料包進行可靠性保證,適合於一次傳輸少量資料,udp傳輸的可靠性由應用層負責。常用的udp埠號有:
應用協議 埠號
dns 53
tftp 69
snmp 161
5樓:蝸牛p科技
datagramsocket用於接收和傳送udp的socket例項。該類有3個建構函式:datagramsocket():
通常用於客戶端程式設計,它並沒有特定監聽的埠,僅僅使用一個臨時的。程式會讓作業系統分配一個可用的埠。datagramsocket(int port):
建立例項,並固定監聽port埠的報文。通常用於服務端。
6樓:
沒有這個邏輯,你接收不到訊息,可能是因為給你發資料那邊,傳送的remoteep剛好寫的就是你的傳送端的埠號。
7樓:匿名使用者
沒這個說法,
只是,如果你不指定監聽埠號的話,客戶端怎麼監聽?伺服器端又如何知道要返回給客戶端哪個埠呢?
一般情況下,伺服器端根據客戶端的埠號返回的,比如客戶端使用1024傳送到伺服器端的80埠,那麼伺服器端接收後返回到客戶端哪個埠呢?所以還是返回1024最好。
8樓:匿名使用者
udp在外網通訊時,需要由內網客戶端向外網(獨立ip,不經過路由)的伺服器發出訊息,內網路由會開啟一個洞,短時間允許外網目標ip和目標埠往回發訊息,否則外網的訊息發不到內網的電腦上,直接被路由扔了。所以
對於伺服器來說,哪個埠接收的,就要用哪個埠發回來,還得儘快發,否則內網路由就把洞堵住了。外網再發訊息,或者不是「原路返回」的訊息,統統被丟掉。。。。所以伱收不到啦。
同樣,路由會把返回的訊息**到客戶端ip指定的埠上,如果埠不一樣的話,伱的客戶端也收不到。。。
9樓:匿名使用者
沒有這個說法,你的結論是錯誤的。
10樓:
《夢裡無尋處》:月兒行雲何處去?忘了歸來,不道春將暮。百草千花寒食路,香車系在誰家樹。淚眼倚樓堪獨語,雙燕來時,陌上相逢否?撩亂春愁如柳絮,依依夢裡無尋處。
終端通過gprs傳送udp資料到固定ip:埠號,socket recvfrom接收不到資料,但卻有返回值,如何解決
11樓:匿名使用者
udp是非連線的,傳送的報文雖然傳送出去了,但是伺服器不一定保證接收到。你的有返回值說明你傳送出去了,但是不代表服務端收到。還明白。
12樓:匿名使用者
**沒啥問題,不知道gprs傳送**是怎樣的
13樓:匿名使用者
不太懂,你可以在說的詳細些嗎
vc 程式設計問題,vc 屬於什麼程式語言
updatedata包含了這個原型沒有。vc 屬於什麼程式語言 vc 是微軟出的用於編寫c 的開發工具,使用它自帶的mfc庫,可以很簡單方便的寫出windows,視窗之類的程式。vc 不是語言,是c 編譯器。c 才是程式語言。vc 程式設計問題,類 include include using nam...
VC 當前路徑的問題,VC 6 0的路徑問題
暈,明明是c 我對c 不熟,不過思路都一樣,應該呼叫系統api函式getmodulefilename獲取程式的全檔名,然後自己去掉後面的程式檔名,就得到了全路徑。vc 6.0的路徑的問題,我已經修復了,但是為什麼下次還要重新設定 沒什麼太好的辦法,98年的vc6總是有點讓人愛恨交織。編譯,連結,註釋...
vc中釋放動態陣列的問題,vc中釋放動態陣列的問題
我覺得問題不是出在free函式的呼叫上面,而是出在memcpy這個函式的呼叫上面,memcpy函式的呼叫形式如下 memcpy void dest,const void src,size t n 關鍵在於size t n這n上面,樓主在位p分配空間的是用count就已經是位元組數了,而這裡的size...