UDP套接字的資料傳輸 套接字的關閉

2021-07-10 11:14:30 字數 1612 閱讀 8162

1.傳送資料

#include #include ssize_t  sendto(int s,const void *msg,size_t  len ,int flags,const  struct  sockaddr   *to,socklen_t  tolen); 函式sendto的功能與引數send類似,但函式sendto不需要套接字處於連線狀態,所以該函式通常用來傳送udp資料,同時因為是無連線的套接字,在使用sendto時需要指定資料目的位址. 引數msg 指向待傳送資料的快取區,引數len指定了待傳送資料的長度,引數flags是控制選項,含義與send() 一致,引數to用於指定目的位址,目的位址的長度由tolen指定; 執行成功返回 實際傳送的資料的位元組數,出錯返回-1;

char send_buf[buffersize];

struct socketaddr_in dest_addr;

//設定目的位址;

dest_addr.sin_family = af_inet;

dest_addr.sin_port = htons(dest_port);

if(inet_aton("172.17.242.131",&dest_addr.sin_addr)<0)

if(sendto(sockfd,send_buf,len,0,(struct sockaddr *)&dest_addr,sizeof(struct sockaddr_in))<0)

2.接收資料

#include #include ssize  recvfrom(int s,void  *buf,size_t len,int flags,struct sockaddr *from,socklen_t    *fromlen);, 函式recvfrom與函式recv功能相似,只是recv是面向連線的套接字 ,而函式recvfrom沒有此限制,可以用於從無連線的套接字(udp)上接收資料; 引數buf指定接收緩衝區,引數len指定了緩衝區的大小,引數flags控制選項如果引數from非空,且該套接字不是面向連線的,則函式recvfrom返回時,引數from將儲存資料的源位址,引數fromlen在呼叫recvfrom前為引數from的長度, 呼叫recvfrom後儲存from的實際大小;執行返回實際接收的資料的位元組數.

//udp的資料接收

char recv_buf[buffersize];

struct sockaddr_in src_addr;

int src_len;

src_len=sizeof(struct sockaddr_in);

if(recvfrom(sockfd,recv_buf,sizeof(recv_buf),0,(struct sockaddr *)&src_addr,&src_len)<0)

3.關閉套接字

1.函式close() 函式close()用來關閉乙個套接字描述符,它與關閉檔案描述符是類似的. #include int close(int fd); 引數fd為乙個套接字描述符,該函式關閉乙個套接字; 2.函式shutdown() 函式shutdown也用於關閉乙個套接字描述符. #include int shutdown(int s,int how); 引數how指定關閉的方式

執行成功返回0,出錯返回-1,錯誤**存入errno中.

TCP套接字的資料傳輸

傳送資料 函式send用來在tcp套接字上傳送資料 include include 函式原型 ssize t send int sockfd,const void msg,size t len,int flags 函式send只能對處於連線狀態的套接字使用,引數sockfd為已經建立好連線的套接字描...

udp套接字收發資料

udp傳送資料注意點 s socket.socket socket.af inet,socket.sock dgram 1 初始化socket 兩個引數 第乙個 ip 1v4協議 第二個是tcp還是udp協議 socket.sock dgram udp協議 socket.sock stream tc...

udp套接字的使用

傳送與接收資料 import socket defmain 建立乙個udp套接字 udp socket socket.socketip 可以使用套接字收發資料 upd socket.sendto hahahah 對方的ip以及port udp socket.sendto b hahaha 192.1...