Chinaunix首页 | 论坛 | 博客
  • 博客访问: 584680
  • 博文数量: 92
  • 博客积分: 5026
  • 博客等级: 大校
  • 技术积分: 1321
  • 用 户 组: 普通用户
  • 注册时间: 2008-02-28 11:04
文章分类

全部博文(92)

文章存档

2011年(9)

2010年(17)

2009年(12)

2008年(54)

我的朋友

分类: LINUX

2008-03-27 14:59:51

 linux网络编程
 
 #include
 套接字三个属性,域,类型,协议。
 int socket(AF_INET|AF_UNIX, SOCK_STREAM|SOCK_DGRAM|SOCK_SEQPACKET|SOCK_RAW, 0);
 关闭套接字
 int close(int socket);
 int shutdown(int socket, SHUT_RD|SHUT_WR|SHUT_RDWR);
 
 internet网络地址
 struct in_addr {
  in_addr_t s_addr; //通常为unsigned long int
 }
 网络地址和普通192.168.1.1字符串格式地址的转化
 #include
 int inet_aton(const char* name, struct in_addr* addr); //正常返回非0,失败返回0
 char* inet_ntoa(struct in_addr* addr);  //返回的char*指向静态区,如果要使用先拷贝下来
 in_addr_t inet_addr(const char* name)    //类似inet_aton错误时返回-1 
 ps: 以上套接字的地址均使用网络地址顺序,从左往右的大端格式,否则将会产生错误
 网络格式地址同机器格式地址转化
 uint16_t hton(uint16_t);
 uint32_t htonl(unit32_t);
 uint16_t ntoh(uint16_t);
 uint32_t ntohl(uint32_t);
 
 
 主机名相关的数据结构
 #include
 struct hostent {
  char*  h_name;
  char** h_aliases;
  int*   h_addrtype;        AF_INET
  int    h_length;          4 
  char** h_addr_list;         
 }
 struct hostent* gethostbyname(const char* name);
 struct hostent* gethostbyaddr(const void* addr, size_t len, AF_INET|AF_UNIX);
 以上均错误时返回空指针。返回的结构同样存储在静态区
 服务相关的数据结构
 struct servent {
  char* s_name;
  char* s_aliases;
  int s_port;
  char* s_proto;    使用的协议名
 }
 struct servent* getservbyname(const char* name, const char* proto_type);
 struct servent* getservbyport(int port, const char* proto_type);                            
 struct servent* getservent();
 void endservent();
 协议数据库
 struct protoent {
  char*  p_name;
  char** p_aliases;
  int    p_proto;
 }
 struct protoent* getprotobyname(const char* name);
 struct protoent* getprotobynumber(int proto);
 struct protoent* getprotoent(void);           //逐项扫描数据库信息
 void endprotoent();
 
 套接字的通用地址类型(函数里面使用):
 struct sockaddr {
  sa_family_t  sa_family;     4
  char      data[];    14    
 }
 套接字初始化地址类型
 struct sockaddr_in {
  sa_family_t sa_family;      4  AF_INET
  in_port_t   sa_port;        2  端口号
  struct in_addr sa_addr;     4  网络地址
  unsigned char sin_zero[8];  8  保留未使用
 }
 
 
 套接字使用:
 服务器:
 int bind(int socket, struct sockaddr* servaddr, size_t addrlen);
 int listen(int socket, int backlog);
 int accept(int socket, struct sockaddr* clientaddr, size_t addrlen);
 客户端:
 int connect(int socket,struct sockaddr* servaddr, size_t addrlen);
 
阅读(632) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~