實現簡單UDP伺服器客戶端模型

2021-08-03 09:24:31 字數 2312 閱讀 6043

udp是無連線的,在資料的傳送之前不需要連線,只需要知道要發資料給誰,然後將資料發出即可,可以直接接收到其他人發來的資料,不必呼叫listen()和accept()函式。所以udp中建立好套接字後,就可以直接進行資料的傳輸。

基於udp的接收和傳送函式:

#include

#include

ssize_t sendto(int sockfd, const void *buf, size_t len, int flags,  const struct sockaddr *dest_addr, socklen_t addrlen);

函式說明:

sendto() 用來將資料由指定的socket 傳給對方主機.

引數描述:

sockfd: 為已建好連線的socket, 如果利用udp協議則不需經過連線操作

buf: 緩衝區

len:buf的大小

flags: 一般設0

addrlen: 為sockaddr 的結構長度.

返回值:

成功則返回實際傳送出去的字元數, 失敗返回-1, 錯誤原因存於errno 中.

ssize_t recvfrom(int sockfd, void *buf, size_t len, int flags,  struct sockaddr *src_addr, socklen_t *addrlen);

函式說明:

用來接收遠端主機經指定的socket 傳來的資料, 並把資料存到由引數buf 指向的記憶體空間

引數描述:

sockfd:為已建好連線的socket

buf:緩衝區

len:buf大小

flags:收取收取資料的方式

addrlen:為sockaddr 的結構長度

返回值:

成功則返回接收到的字元數,失敗返回-1,錯誤原因存於errno 中.

server:

#include#include#include#include#include#include#includestatic void usage(char* proc)

int main(int argc, char* argv)

//建立套接字

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

if(sock < 0)

struct sockaddr_in local;

local.sin_family = af_inet;

local.sin_port = htons(atoi(argv[2]));

local.sin_addr.s_addr = inet_addr(argv[1]);

//將套接字描述符與ip和埠號進行繫結

if(bind(sock, (struct sockaddr*)&local, sizeof(local)) < 0 )

struct sockaddr_in client;

char buf[1024];

while(1)

else

}return 0;

}

client:

#include#include#include#include#include#includestatic void usage(char *proc)

int main(int argc, char* argv)

//建立套接字, 注意使用udp套接字程式設計時應注意模式為sock_dgram

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

if(sock < 0)

//獲取伺服器套接字資訊

struct sockaddr_in server;

server.sin_family = af_inet;

server.sin_port = htons(atoi(argv[2]));

server.sin_addr.s_addr = inet_addr(argv[1]);

char buf[1024];

int len = sizeof(server);

//用peer接收傳送給客戶端的遠端主機socket資訊

struct sockaddr_in peer;

while(1)}}

return 0;

}

UDP 客戶端伺服器

udp 客戶端 include include include include include define size 100 define ip 127.0.0.1 define port 10086 int main struct sockaddr in addr 建立socket udp so...

簡單的客戶端 伺服器模型

1 pragma comment lib,ws2 32.lib 23 include 4 include 5 6using namespace std 78 bool loadsocklib 918 return true 19 2021int main 2227 28 socket sock so...

UDP簡單的伺服器與客戶端設計 下 之客戶端設計

客戶端的設計,流程跟tcp客戶端,幾乎一樣的流程 tcp客戶端設計 第一步 撥號伺服器 conn,err net.dial udp 127.0.0.1 8090 if err nil 第二步 迴圈向伺服器傳送 接收訊息 reader bufio.newreader os.stdin bytes ma...