socket bind函数

 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

 

你可能感兴趣的:(socket bind函数)