三、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協議在傳送資料前不需要建立連...