socket套接字的运用
1个回答
2017-06-02
展开全部
int socket(int family,int type,int protocol);
功能:创建一个通过tcp/ip协议发送和接收网络数据的Socket
返回值:成功返回Socket描述符,失败<0
参数:family:指明协议族(AF_INET,AF_INET6AF_LOCAL,AF_ROUTE,AF_KEY)
type:指明套接字类型:(SOCKET_STREAM,SOCK_DGREAM,SOCK_SEQPACKET,SOCK_RAW)
protocol: 指明协议类型,0时由family和type一起决定
Linux 内核将Socket描述符和文件进行统一管理,所以可以将Socket看做特殊文件
int close(int sockfd)
功能:关闭套接字
返回值:成功返回0,失败<0
参数:已经发开的套接字描述符
family决定地址类型:
当为AF_LOCAL(相当于AF_UNIX)
struct sockaddr_un
{
sa_family_t sun_family; /* AF_UNIX */
char sun_path(); /* pathname */
}
当为AF_INET时:
struct sockaddr_in
{
short int sin_family ; /* AF_INET */
unsignde short int sin_port ; /* port number */
struct in_addr sin_addr ; /* Internet address */网络字节序
}
struct in_addr
{
unsigned long int s_addr ; //IP地址为 32 位 IPV 4 地址 网络字节序
}
后续Socket为了兼容更多类型,采用一下结构:
struct socket
{
short int sin_family;//协议族
char sa_data[14];//协议制定地址
}
在使用这些函数时候我们可以强制类型转换
主机字节序:某个给定的主机系统所用的字节序,它由cpu决定
网络字节序:网络协议制定的字节序,网络协议使用大端字节序来传送多字节整数
unsigned long int htonl(unsigned long int hostlong)
unsigned short int htons(unsigned short int hostshort)
unsigned long int ntohl(unsigned long int netlong)
unsigned short int ntohs(unsigned short int netshort)
备注:h代表host n代表network s代表short l代表long
常用字节操作:
void *memset(void *dest,int ch,size_t len)
void *memcpy(void *dest,const void *src,size_t nbytes)
int memcmp(const void *ptr1,const void *ptr2,size_t nbytes)
void bzero(void *dest,size_t nbytes)等价于memset(dest,0,nbytes);
十进制与32位地址转换:
int inet_aton(const char *strptr,struct in_addr *addrptr)//字符串有效返回1,否则为0
char *inet_ntoa(struct in_addr inaddr)
注: struct in_addr inaddr 均指网络字节序32位ip地址
inet_ntoa 函数的结果位于静态数据区
域名与地址转换:
struct hostent *gethostbyname(const char *hostname);
struct hostent *gethostbyaddr(const char *addr,size_t len,int family)//addr是struct in_addr
功能:创建一个通过tcp/ip协议发送和接收网络数据的Socket
返回值:成功返回Socket描述符,失败<0
参数:family:指明协议族(AF_INET,AF_INET6AF_LOCAL,AF_ROUTE,AF_KEY)
type:指明套接字类型:(SOCKET_STREAM,SOCK_DGREAM,SOCK_SEQPACKET,SOCK_RAW)
protocol: 指明协议类型,0时由family和type一起决定
Linux 内核将Socket描述符和文件进行统一管理,所以可以将Socket看做特殊文件
int close(int sockfd)
功能:关闭套接字
返回值:成功返回0,失败<0
参数:已经发开的套接字描述符
family决定地址类型:
当为AF_LOCAL(相当于AF_UNIX)
struct sockaddr_un
{
sa_family_t sun_family; /* AF_UNIX */
char sun_path(); /* pathname */
}
当为AF_INET时:
struct sockaddr_in
{
short int sin_family ; /* AF_INET */
unsignde short int sin_port ; /* port number */
struct in_addr sin_addr ; /* Internet address */网络字节序
}
struct in_addr
{
unsigned long int s_addr ; //IP地址为 32 位 IPV 4 地址 网络字节序
}
后续Socket为了兼容更多类型,采用一下结构:
struct socket
{
short int sin_family;//协议族
char sa_data[14];//协议制定地址
}
在使用这些函数时候我们可以强制类型转换
主机字节序:某个给定的主机系统所用的字节序,它由cpu决定
网络字节序:网络协议制定的字节序,网络协议使用大端字节序来传送多字节整数
unsigned long int htonl(unsigned long int hostlong)
unsigned short int htons(unsigned short int hostshort)
unsigned long int ntohl(unsigned long int netlong)
unsigned short int ntohs(unsigned short int netshort)
备注:h代表host n代表network s代表short l代表long
常用字节操作:
void *memset(void *dest,int ch,size_t len)
void *memcpy(void *dest,const void *src,size_t nbytes)
int memcmp(const void *ptr1,const void *ptr2,size_t nbytes)
void bzero(void *dest,size_t nbytes)等价于memset(dest,0,nbytes);
十进制与32位地址转换:
int inet_aton(const char *strptr,struct in_addr *addrptr)//字符串有效返回1,否则为0
char *inet_ntoa(struct in_addr inaddr)
注: struct in_addr inaddr 均指网络字节序32位ip地址
inet_ntoa 函数的结果位于静态数据区
域名与地址转换:
struct hostent *gethostbyname(const char *hostname);
struct hostent *gethostbyaddr(const char *addr,size_t len,int family)//addr是struct in_addr
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询