Linux-C-Socket编程

本文内容提到的套接字都是Berkely socket.

实用套接字的四个步骤:
1 分配空间和初始化
2 连接
3 传送数据
4 关闭

具体算法:

服务器端:

 

C++代码
  1. #include <sys/socket.h>
    #include <netinet/in.h>
       
  2.   
  3. int socket_descriptor;   
  4. socket_descriptor = socket(AF_INET, SOCK_STREAM, 0);   
  5.   
  6. int port = 8000;   
  7. struct sockaddr_in sin;   
  8. sin.sin_family = AF_INET;   
  9. sin.sin_addr.s_addr = INADDR_ANY;   
  10. pin.sin_port = htons(port);   
  11.   
  12. bind(socket_descriptor,(struct socketaddr *)&sin, sizeof(sin) );   
  13.   
  14. listen(socket_descriptor, 1024);   
  15.   
  16. struct sockaddr_in pin;   
  17. int address_size;   
  18. int temp_socket_descriptor;   
  19.   
  20. while(1) {   
  21.   temp_socket_descriptor = accept(socket_descriptor,(struct socketaddr *)&pin,  sizeof(address_size));   
  22.   ……   
  23.   close(temp_socket_descriptor);   
  24. }   

 

客户端:

 

C++代码
  1. #include <sys/socket.h>
    #include <netinet/in.h>
    #include <netdb.h>     //直接影响sockaddr_in.sin_addr的填写
      
  2.   
  3. char * host_name = ‘127.0.0.1’;   
  4. struct hostent * server_host_name;   
  5. server_host_name = gethostbyname(host_name);   
  6.   
  7. int port = 8000;   
  8. struct sockaddr_in pin;   
  9. pin.sin_family = AF_INET;   
  10. pin.sin_addr.s_addr = htol(INADDR_ANY);   
  11. pin.sin_addr.s_addr = ((struct in_addr *)(server_host_name->h_addr))->s_addr; 或者 pin.sin_addr = *(struct in_addr *) server_host_name->h_addr;   
  12. pin.sin_port = htons(port);   
  13.   
  14. int socket_descriptor;   
  15. socket_descriptor = socket(AF_INET, SOCK_STREAM, 0);   
  16. connect(socket_descriptor, (void *)&pin, sizeof(pin));   
  17. …….   
  18. close(socket_descriptor);