先記錄下關於udp的基礎知識點
udp的基礎知識點
包括的標頭檔案和常用的函式
#include
#include
1.socket函式原型
int socket(int domain, int type, int protocol);
功能:建立乙個socket
引數說明:
引數1:設定網路通訊的域 這裡的af_inet 表示ipv4的網路型別;使用af_inet6的網路型別
引數2:socket的資料型別 這裡的sock_dgram表示udp型別;使用sock_stream表示tcp型別
引數3:協議型別 一般置為0
例子:int sockfd = socket(af_inet,sock_dgram,0);
2.sendto函式原型
ssize_t sendto(int sockfd, const void *buf, size_t len, int flags,
const struct sockaddr *dest_addr, socklen_t addrlen);
功能:sendto傳送指令給指定的伺服器
引數說明:
引數1:監聽埠的套接字檔案描述符 通過socket返回
引數2:傳送緩衝區
引數3:緩衝區的大小
引數4:一般置為0
引數5:sockaddr結構體位址 這個結構體包含 ip位址 埠號 網路通訊域
引數6:引數5的長度 可以用sizeof(sockaddr_in)獲取
例子:int sendlength = sendto(sockfd,buffer,strlen(buffer),0, (struct sockaddr*)addr, len);
3.recvfrom函式原型
ssize_t recvfrom(int sockfd, void *buf, size_t len, int flags,
struct sockaddr *src_addr, socklen_t *addrlen);
功能:接收服務端返回的資訊
引數說明:
第乙個引數sockfd:正在監聽埠的套介面檔案描述符,通過socket獲得
第二個引數buf:接收緩衝區,往往是使用者定義的陣列,該陣列裝有接收到的資料
第三個引數len:接收緩衝區的大小,單位是位元組
第四個引數flags:填0即可
第五個引數src_addr:指向傳送資料的主機位址資訊的結構體,也就是我們可以從該引數獲取到資料是誰發出的
第六個引數addrlen:表示第五個引數所指向內容的長度
返回值:成功:返回接收成功的資料長度 失敗 返回-1
進行udp通訊的時候 埠是一定要一致的 否則無法收到訊息
//step2 給sockaddr_in結構體賦值(ip位址 埠號 網路通訊域)
bzero(&addr,sizeof(struct sockaddr_in));
addr.sin_family=af_inet;
addr.sin_port=htons(server_port);
= htonl("139.224.117.109");
//inet_aton("139.224.117.109", &addr.sin_addr);
if(inet_aton("127.0.0.1",&addr.sin_addr)<0)
例子:struct sockaddr_in addr;
bzero(&addr,sizeof(struct sockaddr_in));
addr.sin_family = af_inet;
addr.sin_port = htons(server_port);
addr.sin_addr.s_addr = inet_addr("127.0.0.1");
udp的server例子:
/*
2019-11-30 11:24:14
乙個簡單的udp server的實現
*/#include #include #include #include #include #include #include #include #include #include #define server_port 9989
#define max_msg_size 1024
int main()
//step2 給sockaddr_in結構體賦值
bzero(&addr,sizeof(struct sockaddr_in));
addr.sin_family=af_inet;
addr.sin_addr.s_addr=htonl(inaddr_any);
addr.sin_port=htons(server_port);
//step3 繫結sock
if(bind(sockfd,(struct sockaddr *)&addr,sizeof(struct sockaddr_in))<0)
while(1)
} //step5 當接收到的值異常的時候 結束這個流程 釋放socket
close(sockfd);
}
udp client的例子
/*
2019-11-30 11:32:19
乙個簡單的udp的client
*/#include #include #include #include #include #include #include #include #include #define server_port 9999
#define max_buf_size 1024
int main()
//step2 對sockaddr_in進行賦值
bzero(&addr,sizeof(struct sockaddr_in));
addr.sin_family=af_inet;
addr.sin_port=htons(server_port);
addr.sin_addr.s_addr = inet_addr("127.0.0.1");
while(1)
//step4 結束訊息
close(sockfd);
}
編譯就使用gcc來進行編譯就好了
gcc -o client client.c
gcc -o server server.c
執行結果:
這裡記錄乙個問題(乙個警告)
example_tcp_client.c:53:5: warning: implicit declaration of function 『write』 [-wimplicit-function-declaration]
write(sockfd,buffer,strlen(buffer));
^example_tcp_client.c:56:5: warning: implicit declaration of function 『close』 [-wimplicit-function-declaration]
close(sockfd);
這個嚴格上說不算錯誤 只是警告,這裡加上標頭檔案 #include 即可解決此問題
Java中Socket通訊的基本方法
建立socket連線到server socket chatsocket new socket 127.0.0.1 5000 建立socket的時候需要用到兩個重要的引數,乙個是ip位址,另外乙個是埠號。ip位址可以理解成網路中特定位置的計算機 伺服器相當於一台連續工作的計算機 埠號對應於計算機中特定...
Linux中檢視socket狀態
首先給大家分享乙個巨牛巨牛的人工智慧教程,是我無意中發現的。教程不僅零基礎,通俗易懂,而且非常風趣幽默,還時不時有內涵段子,像看 一樣,哈哈 我正在學習中,覺得太牛了,所以分享給大家!點這裡可以跳轉到教程 linux中檢視socket狀態 cat proc net sockstat 這個是ipv4的...
Linux中檢視socket狀態
linux中檢視socket狀態 cat proc net sockstat 這個是ipv4的 sockets used 137 tcp inuse 49 orphan 0 tw 3272 alloc 52 mem 46udp inuse 1 mem 0raw inuse 0 frag inuse ...