标签:
1 #include<stdio.h> 2 #include<sys/types.h> 3 #include<sys/socket.h> 4 #include<netinet/in.h> 5 #include<arpa/inet.h> 6 #include<unistd.h> 7 #define PORT 2345 8 #include<stdlib.h> 9 #include<string.h> 10 int main(void) 11 { 12 int sockfd;
1 /* 2 注意两种套接口的 数据结构 3 4 原始套接口 5 #include<sys/socket.h> 6 struct sockaddr 7 { 8 uint8_t sa_len; //长度成员,无需设置 9 sa_family_t sa_family;//协议族 AF_ xxx 10 char sa_data[14];//14bit的协议地址 11 } 12 13 14 15 IPv4 套接口 16 17 #include<netinet/in.h> 18 19 struct socketaddr_in 20 { 21 uint8_t sin_len; /*长度成员无需设置*/ 22 sa_family_t sin_family;//套接口结构地址族,如IPv4 为AF_INET 23 in_port_t sin_port;//16位的TCP和UDP端口号 24 struct in_addr sin_addr; 25 unsigned char sin_zero[8]; //未用 26 } 27 28 29 30 struct in_addr 31 { 32 in_addr_t s_addr; 33 }
13 struct sockaddr_in addr; 14 int addr_len=sizeof(struct sockaddr_in);
/* socket 函数 作用:创建为系统调用的套接口socket 头文件及原型: #include<sys/types.h> #include<sys/socket.h> int socket(int family,int type,int ptotocol); 返回值: 成功返回 套接口描述符 失败返回-1 family 指的是协议簇 取值如下: PF_UNIX(UNIX协议族) PF_INET(IPv4 协议) PF_INET6(IPv6协议) AF_FOUTE(路由套接口) type 指明了通信的字节流类型 SOCK_STREAM TCP方式 SOCK_DGRAM UDP方式 SOCK_RAW 原始套接字 SOCK_PACKET 支持数据链路访问 ptotocol 可以设置为0.原始套接字另外 */
15 if((sockfd=socket(AF_INET,SOCK_STREAM,0))<0) 16 { 17 printf("socket created error!"); 18 exit(1); 19 } 20 else 21 { 22 printf("socket created successfully!\nsocket id:%d\n",sockfd); 23 } 24
1 /* 2 用法: 3 函数原型 4 extern void bzero(void *s, int n); 5 头文件 6 #include <string.h> 7 功能:置字节字符串s的前n个字节为零。 8 */
25 bzero(&addr,sizeof(struct sockaddr_in));//清空表示地址的结构体变量 26 addr.sin_family=AF_INET; 27 addr.sin_port=htons(PORT);//返回网络字节序 28 addr.sin_addr.s_addr=htonl(INADDR_ANY);//INADDR_ANY就是指定地址为0.0.0.0的地址,这个地址事实上表示不确定地址,或“所有地址”、“任意地址”。 一般来说,在各个系统中均定义成为0值。 29
1 /* 2 bind函数 3 4 作用:使用bind函数在套接口上面绑定一个指定的端口号和ip地址 5 6 头文件及函数原型 7 8 #include<sys/types.h> 9 #include<sys/socket.h> 10 int bind(int sockfd, const struct sockaddr *my_addr,socklen_t addrlen); 11 12 13 参数定义: 14 sockfd 已经建立的套接字的描述符 15 my_addr 指向sockaddr结构体类型的指针 16 addrlen 表示my_addr 结构的长度 17 18 19 */
30 if(bind(sockfd,(struct sockaddr *)(&addr),sizeof(struct sockaddr))<0)//强制类型转换 31 { 32 perror("bind error!"); 33 exit(1); 34 } 35 else 36 { 37 printf("bind port successfully!\nlocal port:%d\n",PORT); 38 } 39 return 0; 40 }
程序运行结果:
1 socket created successfully! 2 socket id:3 3 bind port successfully! 4 local port:2345
标签:
原文地址:http://www.cnblogs.com/wireless-dragon/p/5186323.html