这里先列出几个本程序中使用的函数。
——————————————————————————————————————
int socket(int domain, int type, int protocol);
int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen);
int  connect(int  sockfd,  const  struct sockaddr *serv_addr, socklen_t addrlen);
int   bind(int   sockfd,  const  struct  sockaddr  *my_addr,  socklen_t   addrlen);
int listen(int sockfd, int backlog);
const char *inet_ntop(int af, const void *src, char *dst, socklen_t cnt);
int inet_pton(int af, const char *src, void *dst);
/*
       uint32_t htonl(uint32_t hostlong);
 
       uint16_t htons(uint16_t hostshort);
 
       uint32_t ntohl(uint32_t netlong);
 
       uint16_t ntohs(uint16_t netshort);
*/

close(Int  socketfd);

 
另外还有几个重要的数据结构;
Struct sockaddr_in{
       Sa_family__t sin_family; //协议的类型,一般用AF_INETipv4
       In_port_t sin_port;       //通信在传输层的端口号
       Struct in_addr sin_addr;   //32位的ip地址
       Unsigned char sin_zero[8];  //填充区,是sockaddr_in sockaddr结构大小相同,能够进行强制转换!
}
Struct in_addr{
       In_addr_t s_addr;
}
Struct sockaddr{
       Sa_family sa_family;
       Char sa_data[14];
}//这个结构体一般很少使用,通常用sockaddr_in 代替,当需要这个类型的参数时,使用强制类型转换为sockaddr
 
关于函数的用法,这里就不在详细解说了,但简单介绍一下inet_ntopinet_pton这两个函数吧!
由于通信用的地址信息存放在sockaddr_in中,而且以一个整数的形式存放,而我们通常使用xxXxxxxx的字符串形式,所以就需要对编程时的地址和直观地址之间进行转换。
将转换后的值付给sin_addr或者一个字符指针。
/* */之间的函数是用于字节转换的,因为通信存在一个先传输高字节数据和低字节数据的问题,也就是大端和小端得问题,一般的pccpu为小端,但网络规定所有数据为大端方式。这就造成了本机和网络的数据不统一,因此用这四个函数进行转换。下面的程序大家会看到在端口的转换上用到了!
 
关于这些函数我建议去看linuxman手册,很详细,也很准确。不过是英文的哦~~~
 
 
下面是我的代码
/*
Socket_server.c
*/
/*

#include <stdio.h>