網路程式設計 06 使用 UDP 進行讀寫

2021-09-29 01:14:53 字數 4357 閱讀 1289

三、cmake 管理當前專案

四、測試 udp 例子

小結sendto:傳送報文函式

#include

ssize_t sendto

(int sockfd,

const

void

*buff, size_t nbytes,

int flags,

const

struct sockaddr *to, socklen_t addrlen)

;

引數含義:

recvfrom 函式

#include

ssize_t recvfrom

(int sockfd,

void

*buff, size_t nbytes,

int flags,

struct sockaddr *to, socklen_t *addrlen)

;

引數含義:

返回值表示實際接收的位元組數

udpserver.c

#include

"common.h"

static

int count;

static

void

recvfrom_int

(int signo)

intmain

(int argc,

char

**ar**)

}

udpclient.c

#include

"common.h"

intmain

(int argc,

char

**ar**)

// 建立套接字

int sock_fd;

sock_fd =

socket

(pf_inet, sock_dgram,0)

;// 初始化目標伺服器位址和埠

struct sockaddr_in servaddr;

bzero

(&servaddr,

sizeof

(servaddr));

servaddr.sin_family = af_inet;

servaddr.sin_port =

htons

(serv_port)

;inet_potn

(af_inet, ar**[1]

,&servaddr.sin_addr)

;struct sockaddr replyaddr;

replyaddr =

malloc

(sizeof

(servaddr));

socklen_t replylen;

char send_line[maxline]

;char recv_line[maxline]

;// 從標準輸入 stdin 中讀取輸入的字元

while

(fgets

(send_line, maxline,

stdin)!=

null

)printf

("now sending %s\n"

, send_line)

;// 通過 sendto 函式傳送給目標伺服器

size_t rt =

sendto

(sock_fd, send_line,

strlen

(send_line),0

,(struct sockaddr *

)&servaddr,

sizeof

(servaddr));

if(rt <0)

printf

("send bytes: %zu\n"

, rt)

; replylen =0;

// 通過 recvfrom 函式接收目標伺服器傳送來的報文

int n =

recvfrom

(sock_fd, recv_line, maxline,

0, replyaddr,

&replylen);if

(n <0)

recv_line[n]=0

;// 將目標伺服器傳送來的報文列印到標準輸出 stdout

fputs

(recv_line,

stdout);

fputs

("\n"

,stdout);

}exit(0);}

標頭檔案 common.h

#ifndef chap_06_common_h

#define chap_06_common_h

#include

#include

#include

#include

#include

/* basic socket definitions */

#include

/* sockaddr_in{} and other internet defns */

#include

/* inet(3) functions */

#include

#include

void

error

(int status,

int err,

char

*fmt,..

.);#define serv_port 43211

#define maxline 4096

#endif

//chap_06_common_h

-cmakelists.txt

-include:存放標頭檔案

-src:存放源**

include 目錄:include/common.h(common.h 上面有)

src 目錄(udpclient.c、udpserver.c 上面有)

生成的目標二進位制檔案目錄,對應 cmake 執行的目錄

生成的可執行檔案存放目錄,由上面 cmakelists.txt 中set(executable_output_path $/bin)指令指定

生成的可執行檔案在 build/bin 目錄下

客戶端會阻塞在 recvfrom 上

正常收發

正常收發

伺服器繼續可以接收客戶端傳送來的報文

1.關於 udp

3.關於 udp 程式

UDP網路程式設計

基於udp 伺服器 程式步驟 1.建立乙個socket,用socket 函式 2.繫結ip位址 埠等資訊到socket上,用函式bind 3.迴圈接收資料,用recvfrom 4.關閉網路連線。基於udp 客戶端 程式步驟 1.建立乙個socket,用socket 函式 2.繫結ip位址 埠等資訊到...

UDP網路程式設計

基於udp 通訊模型 由上圖可以看出udp通訊的步驟如下 基於udp 伺服器 1 建立乙個socket,用函式socket 2 繫結ip位址 埠等資訊到socket上,用函式bind 3 迴圈接收資料,用函式recvfrom 4 關閉網路連線 基於udp 客戶端 1 建立乙個socket,用函式so...

網路程式設計 UDP

網路程式設計傳輸層選擇乙個資料控制模式 tcp或者udp,前面我們已經介紹了tcp程式設計,這篇我們簡單的來看看udp程式設計。udp是無連線的不可靠的資料報服務。udp協議在ip協議上增加了復用 分用和差錯檢測功能。udp的特點 a 是無連線的。相比於tcp協議,udp協議在傳送資料前不需要建立連...