代码改变世界

linux socket认识

2015-04-13 02:16  枫桥夜泊-霜满天  阅读(285)  评论(0)    收藏  举报

  linux 在C的方式下,服务端的创建主要包括几个模块:套节字的创建、封装IP地址和端口号以及socket连接方式、绑定socket和封装的struct sockaddr_in,

监听的执行、开启服务端,接受client链接、接受客户端消息、发送服务端消息。

  套节字的创建:

  代码:

  int socket;

  socket = new Socket(AF_INET,SOCK_STREAM,0);

  注释:

  1.AF_INET:IPV4网络协议

  2.AF_INET6:IPV6网络协议

  3.SOCK_STREAM:面向链接的TCP协议

  4.SOCK_DGRAM:非链接的UDP协议

  封装IP地址和端口号:

  代码:

  struct sockaddr_in server;

  int port = 8888;

  bzero(&server,sizeof(server));

  server.sin_family=AF_INET

  server.sin_addr.s_addr = INADDR_ANY;

  server.sin_port = htons(port);

  注释:

  1.bzero();用来初始化struct sockaddr_in

  2.sin_family设置网络协议,只能是AF_INET

  3.sin_addr.s_addr用来设置IP地址,INADDR_ANY代表本机IP地址

  4.sin_port用来设置端口号

  绑定socket和struct sockaddr_in

  代码:  

  bind(sock,(struct sockaddr*)&server,sizeof(struct sockaddr));

  注释:

  bind(sock句柄,struct sockaddr_in指针,struct sockaddr_in长度);

  开启监听等待客户端连接:

  代码:

  struct sockaddr_in temp;

  int addresssize;

  int client_sock;

  while(1)

  {

    client_sock=accept(sock,(struct sockaddr_in*)&temp,&addresssize);

  }

  收发客户端数据:

  char buf[1024];

  int len;

  recv(client_sock,buf,1024,0);

  printf("client recv:%s\n",buf);

  len=strlen(buf);

  send(client_sock,buf,len,0);