如何分析UDP协议

一、套接字(socket)

    套接字socket: ip地址 + port端口号。在TCP/IP协议中,它唯一标识网络通讯中的一个进程。套接字用来描述网络连接的 一对一关系。

    TCP/IP协议规定,网络数据流应采用 大端字节序,即 (内存)低地址高字节(数据)。

二、UDP_SOCKET 相关

    UDP 协议  —-  用户数据报协议(面向非连接)   —  SOCK_DGRAM 

    h表示host,n表示network,l表示32位长整数,s表示16位短整数。

    IPv4地址格式定义在netinet/in.h中,IPv4地址: sockaddr_in结构体,包括16位端口号和32位IP地址

struct sockaddr_in  {     uint8_t sin_len;     sa_family_t sin_family;     in_port_t sin_port;     struct in_addr sin_addr;     char sin_zero[8]; };

三、UDP socket 实例:

//udp_server.c

#include <stdio.h> #include<stdlib.h> #include<sys> #include<sys> #include<arpa> #include<netinet> #include<unistd.h> #include<string.h> #include<errno.h>   void usage(const char *proc) { 	printf("%s:[ip][port]n",proc); }  int main(int argc,char *argv[]) { 	if(argc != 3) 	{ 		usage(argv[0]); 		return 1; 	} 	char *_ip=argv[1]; 	int _port=atoi(argv[2]); 	int sock=socket(AF_INET,SOCK_DGRAM,0); 	if(sock  0) 		{ 			buf[_size]=''; 			printf("[%s : %d]: %sn",inet_ntoa(client.sin_addr),ntohs(client.sin_port),buf); 		} 		else if(_size == 0) 		{ 			printf("client close...n"); 		} 		else 		{} 	} 	return 0; }</errno.h></string.h></unistd.h></netinet></arpa></sys></sys></stdlib.h></stdio.h>

//udp_client.c

#include <stdio.h> #include<stdlib.h> #include<sys> #include<sys> #include<arpa> #include<netinet> #include<unistd.h> #include<string.h> #include<errno.h>   void usage(const char *proc) { 	printf("%s:[ip][port]n",proc); }  int main(int argc,char *argv[]) { 	if(argc != 3) 	{ 		usage(argv[0]); 		return 1; 	} 	char *_ip=argv[1]; 	int _port=atoi(argv[2]); 	int sock=socket(AF_INET,SOCK_DGRAM,0); 	if(sock  0) 		{ 			buf[_size]=''; 			printf("[%s : %d]: %sn",inet_ntoa(client.sin_addr),ntohs(client.sin_port),buf); 		} 		else if(_size == 0) 		{ 			printf("client close...n"); 		} 		else 		{} 	} 	return 0; }</errno.h></string.h></unistd.h></netinet></arpa></sys></sys></stdlib.h></stdio.h>

运行结果:

如何分析UDP协议

© 版权声明
THE END
喜欢就支持一下吧
点赞9 分享