UDP優點:

  • 可以同時傳送資料給多個對象
  • 即時性優於TCP
  • 訊息的界限明確
  • 比TCP容易超越NAT(P2P情況)
    • UDP可以活用STUN(Simple Traversal UDP through NATs)

UDP通訊:

UDP通訊

recvfrom() V.S recv()

:主要不同在於,是否每次可以取得傳送端的資料

recvfrom()

#include <sys/types.h>
#incude <sys/socket.h>

ssize_t recvfrom(
int s, /* socket的檔案描述符號 */
void *buf, /* 取得接收資料的緩衝器 */
size_t len, /* buf的大小 */
int flags, /* 指定動作時的動作的旗標 */
struct sockaddr *from, /* 取得關於對象位置資料的sockaddr結構體 */
socklen_t *fromlen /* from的大小 */
);

recv()

#include <sys/types.h>
#incude <sys/socket.h>

ssize_t recvfrom(
int s, /* socket的檔案描述符號 */
void *buf, /* 取得接收資料的緩衝器 */
size_t len, /* buf的大小 */
int flags, /* 指定動作時的動作的旗標 */
);

 

sendto() V.S send()

主要的差異為,在於send()系統呼叫是要求在socket連線狀態(已是connect()狀態下執行。)

如果是連線狀態下的socket,可以透過write()系統呼叫傳送資料,但send()與write的差別在於是否可以指定flags。

因此,在flags指定為0的send()系統呼叫,變成可和write()一樣的執行動作。

sendto()

#include <sys/types.h>
#incude <sys/socket.h>

ssize_t sendto(
int s, /* socket的檔案描述符號 */
const void *buf, /* 包含傳送資料的緩衝器 */
size_t len, /* buf的大小 */
int flags, /* 指定動作時的動作的旗標 */
const struct sockaddr *to, /* 取得關於對象位置資料的socketaddr結構體 */
socketlen_t tolen /* to的大小 */
);

send()

#include <sys/types.h>
#incude <sys/socket.h>

ssize_t sendto(
int s, /* socket的檔案描述符號 */
const void *buf, /* 包含傳送資料的緩衝器 */
size_t len, /* buf的大小 */
int flags, /* 指定動作時的動作的旗標 */
);

 

arrow
arrow
    全站熱搜

    LittleChoCho 發表在 痞客邦 留言(0) 人氣()