UDP C語言socket程式設計

2021-09-25 17:05:22 字數 3857 閱讀 8043

udp程式設計相比tcp來說相對簡單主要用到sendto()和recvfrom()這兩個函式,接下來主要介紹一下這兩個函式。

標頭檔案

#include

#include

函式原型

int sendto (

int s,

const

void

*buf,

int len,

unsigned

int flags,

const

struct sockaddr *to,

int tolen)

;int

recvfrom

(int s,

void

*buf,

int len,

unsigned

int flags,

struct sockaddr *from,

int*fromlen)

;

函式說明

sendto(),是把udp資料報發給指定位址;

recvfrom()是從指定位址接收udp資料報。

引數說明

s: socket描述符。

buf: udp資料報快取位址。

len: udp資料報長度。

flags: 該引數一般為0。

to: sendto()函式引數,struct sockaddr_in型別,指明udp資料發往**報。

tolen: 對方位址長度,一般為:sizeof(struct sockaddr_in)。

fromlen:recvfrom()函式引數,struct sockaddr_in型別,指明從**接收udp資料報。

函式返回值

對於sendto()函式,成功則返回實際傳送出去的字元數,失敗返回-1,錯誤原因存於errno 中。

對於recvfrom()函式,成功則返回接收到的字元數,失敗則返回-1,錯誤原因存於errno中。

關於udp資料報

udp都是以資料報的形式進行傳送和接收的,而tcp是以資料流的形式進行傳送和接收的。資料報和資料流,這兩者要區分開來。

udp server和client原始碼例項

udp server:

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

void

print_usage

(char

*progname)

intmain

(int argc,

char

**ar**),,

};while

((ch=

getopt_long

(argc, ar**,

"p:h"

, opts,

null))

!=-1)

}if(!port )

servfd =

socket

(af_inet,sock_dgram,0)

;if(servfd <0)

servaddr.sin_family = af_inet;

servaddr.sin_port =

htons

(port)

; servaddr.sin_addr.s_addr =

htonl

(inaddr_any);if

(bind

(servfd,

(struct sockaddr *

)&servaddr,

sizeof

(servaddr)

)<0)

printf

("bind servfd[%d] successfully!\n"

,servfd)

;while(1

)printf

("received a string from client %s, string is: %s\n"

,inet_ntoa

(servaddr.sin_addr)

, buf)

; rv =

sendto

(servfd,buf,len,0,

(struct sockaddr *

)&servaddr,

sizeof

(servaddr));

if(rv <0)

printf

("reply data sucessfully!\n");

}}

udp client:

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

void

print_usage

(char

*progname)

intmain

(int argc,

char

**ar**)

;char

*servip;

struct sockaddr_in sockaddr;

struct option opts=

,,,}

;while

((ch=

getopt_long

(argc, ar**,

"i:p:h"

, opts,

null))

!=-1)

}if(!servip ||

!port )

sockfd =

socket

(af_inet, sock_dgram,0)

;if(sockfd <0)

sockaddr.sin_family = af_inet;

sockaddr.sin_port =

htons

(port)

;inet_aton

(servip,

&sockaddr.sin_addr)

;while(1

) rv =

sendto

(sockfd,buf,len,0,

(struct sockaddr *

)&sockaddr,

sizeof

(sockaddr));

if(rv <0)

printf

("send data[%d] successfully!\n"

,rv)

; len =

recvfrom

(sockfd,buf,

sizeof

(buf),0

,(struct sockaddr *

)&sockaddr,

&addr_len);if

( len <0)

printf

("receive from server: %s\n"

, buf)

;}

Tcp與Udp(C語言版)

tcp transmission control protocol 傳輸控制協議tcp是一種面向連線 連線導向 的 可靠的 基於位元組流的運輸層 transport layer 通訊協議,在 osi模型中,它完成第四層傳輸層所指定的功能。udp 是user datagram protocol的簡稱,...

C語言 socket 通訊程式設計

server端在tcp的通訊中,需要做到以下6點 socket套接字的構造 socket int socket int domain,int type,int protocol domain 指定通訊域 選擇通訊的協議族。type 型別,tcp為sock stream,udp為sock dgram。...

用Perl語言進行Socket程式設計

用perl語言進行socket程式設計 網路程式設計是一門神秘且複雜的藝術,當然也十分有趣。perl語言提供了豐富的tcp ip網路函式,所有這些函式都直接 於c語言的socket庫函式.由於perl語言和c語言的socket庫函式在型式和使用方法上都是一樣的,因此會使用perl語言進行socket...