通過socket來進行乙個UDP通訊

2021-10-05 12:32:21 字數 2508 閱讀 8412

前言

internet 協議集支援乙個無連線的傳輸協議,該協議稱為使用者資料報協議,一般用在廣播等地方,因為他不在意對方是否收到

udp:

客戶端:先接收資料,先執行

1>建立乙個socket套接字(呼叫socket函式,建立乙個網路描述符)

#include

#include

#include

#include

#include

int socket(int domain, int type, int protocol);

//如果成功,返回乙個可以使用的網路描述符,失敗返回-1,並且設定errno的值

引數1:位址協議族

af_unix //unix域

af_inet //ipv4協議 32位整型數

af_inet6 //ipv6協議 128位整型數

af_unix/af_local 表示單機程序程式

引數2:傳輸型別

sock_dgram //代表使用udp傳輸

sock_stream //代表使用tcp傳輸

sock_raw //一般用於unix域傳輸

引數3:協議//特殊要求

protocol 應用層協議型別,0 表示自動匹配;

//例子:

int sfd = socket(af_inet,sock_dgram,0);

2>繫結ip位址和埠號 192.168.1.10 8888

int bind(int sockfd, const struct sockaddr *addr,socklen_t addrlen);

//為指定的網路描述符繫結乙個ip位址和埠號,成功返回0,失敗返回-1,設定errno

引數1:網路描述符

引數2:ip位址結構體指標//原始結構體ip和port混合,使用不方便,所以不用

struct sockaddr_in

; /*ip位址結構體*/

struct in_addr

;

//例子:

struct sockaddr_in ip;

ip.sin_family = af_inet;

ip.sin_port = htons(8888);

ip.sin_addr.s_addr = inet_addr(「192.168.1.10」);

//inet_pton(af_inet,「0.0.0.0」,&ip.sin_addr.s_addr);

//如果位址填"0.0.0.0",則預設使用本機的ip位址

引數3:ip結構體長度

sizeof(ip)

通常我們在使用sockaddr_in 這個結構體的時候,我們需要對他進行型別轉化

例子: bind (sfd,(void*)ip,sizeof(ip));

3、傳送:sendto

ssize_t sendto(int sokfd, const void *buf, size_t len,

int flags, const struct sockaddr *dest_addr,

socklen_t addrlen);

功能:該函式可以從當前套接字中向目標主機傳送資料;

引數:sockfd 套接字值,一般是socket()的返回值

buf 要傳送的資料位址

len 要傳送的資料長度

flags 傳送方式,0 表示阻塞傳送

dest_addr 要傳送的目標位址結構體,不能為空;

addrlen 目標主機位址的長度。

返回值:成功 傳送的資料長度

失敗 -1;

例子:sendto(sfd,「hello」,6,0,&saddr,sizeof(saddr));

接收:recvfrom

ssize_t recvfrom(int sockfd, void *buf, size_t len, int flags,

struct sockaddr *src_addr, socklen_t *addrlen);

功能:該函式將會在套接字上阻塞等待獲取資料;

引數:sockfd 套接字id

buff 本地儲存資料的位址

len 儲存資料的長度

flags 獲取資料的方式,0 阻塞

src_addr 資料中源主機的位址資訊結構體,如果不關心傳送端

用null表示;

addrlen 位址長度的指標

返回值:成功 獲取資料的長度

失敗 -1;

4>關閉網路描述符

close(sfd);

伺服器:先傳送資料,後執行

1>建立乙個socket套接字(呼叫socket函式,建立乙個網路描述符)

2>繫結ip位址和埠號(可以省略繫結) 192.168.1.10 8888

3>收發資料

4>關閉網路描述符

H 通過按鈕來新增乙個選項卡

方法如下 說明 參照框架的contabs.js 進行方法修改,由於是在iframe層操作按鈕,所以只需要在原有的基礎上加上window.parent.document 去獲取相應的物件即可實現。新增選項卡 function createmenuitem dataurl,menuname flag f...

jquery 學習,乙個乙個來

1.document ready function 與window.nl ad function 的區別 前者為建立完畢dom就執行,可以新增多次.可以用 window load 來實現後者.也可以這樣jquery function 後者為建立完畢並載入完畢才執行,寫多個時後寫的會沖掉先寫的,只能執...

乙個socket原始碼

vc編寫伺服器 式的聊天室 2009 9 11 本文參考了 visual c 6.0完全自學手冊 中的示例 一 流程說明 客戶端客戶端建立流式套接字 呼叫connection向伺服器傳送連線請求 連線成功後使用建立與之關聯的的csocketfile物件和carchive物件 使用carchive物件...