socket网络连接

来源:互联网 发布:建模软件哪个好 编辑:程序博客网 时间:2024/06/03 18:13

Socket Client Example

#include <stdio.h>#include <string.h>#include <stdlib.h>#include <sys/types.h>#include <sys/socket.h>#include <sys/un.h>#include <arpa/inet.h>#include <netinet/in.h>const int port = 5000;                    //服务器开放的端口号const char* ip = "10.10.12.95";              //服务器的ipint main(){  //创建套接字,即创建socket   int clt_sock = socket(AF_INET, SOCK_STREAM, 0);   if(clt_sock < 0)  {  //创建失败  perror("socket");  return 1;  }  //绑定信息,即命名socket   struct sockaddr_in addr;   addr.sin_family = AF_INET;    // ipv4协议族  addr.sin_port = htons(port);    // 指定目标机端口 并转化位网络自己顺序  addr.sin_addr.s_addr = inet_addr(ip);              //inet_addr函数将把用点分十进制字符串表示的IPv4地址转化为用网络字节序整数表示的IPv4地址           socklen_t addr_len = sizeof(addr);  int connect_fd = connect(clt_sock, (struct sockaddr*)&addr, addr_len);  //发起连接          int connect_fd = connect(clt_sock, (struct sockaddr*)&addr, addr_len);          if(connect_fd < 0)          {                   perror("connect");                   return 2;          }         while(1)      {          memset(buf, '\0', sizeof(buf));          printf("client please enter: ");          fflush(stdout);          ssize_t size = read(0, buf, sizeof(buf) - 1);          if(size > 0)          {              buf[size - 1] = '\0';          }          else if(size == 0)          {              printf("read is done...\n");              break;          }          else          {              perror("read");              return 4;          }          write(clt_sock, buf, strlen(buf));          size = read(clt_sock, buf, sizeof(buf));          if(size > 0)          {               buf[size] = '\0';          }          else if(size == 0)          {              printf("read is done...\n");              break;          }          else           {              perror("read");              return 5;          }          printf("server: %s\n", buf);       }      close(clt_sock);      return 0;}

Socket Server Example

#include <stdio.h>#include <string.h>#include <stdlib.h>#include <sys/types.h>#include <sys/socket.h>#include <sys/un.h>#include <arpa/inet.h>#include <netinet/in.h>const int port = 5000;const char* ip = "10.10.12.95"; int main(){  //创建套接字,即创建socket   int ser_sock = socket(AF_INET, SOCK_STREAM, 0);   if(ser_sock < 0)  {  //创建失败  perror("socket");  return 1;  }  //绑定信息,即命名socket   struct sockaddr_in addr;   addr.sin_family = AF_INET;   addr.sin_port = htons(port);   addr.sin_addr.s_addr = inet_addr(ip);   if(bind(ser_sock, (struct sockaddr*)&addr, sizeof(addr)) < 0)   {                       //绑定失败        perror("bind");        return 2;      }   //监听socket  int listen_sock = listen(ser_sock, 5);    // 5为内核为该套接字排队的最大连接个数  if(listen_sock < 0)  {  //监听失败  perror("listen");  return 3;  }         //接受连接  //系统调用从listen监听队列中接受一个连接  //int accept(int sockfd, struct sockaddr* addr, socklen_t* addrlen)  //sockfd参数是执行过listen系统调用的监听socket;addr参数用来获取被  //接受连接的远端socket地址,该socket地址的长度由addrlen参数指出  //accept成功时返回一个新的连接socket,该socket唯一的标识了被接受  //的这个连接,服务器可通过读写该socket来与被接受连接对应的客户端通信          struct sockaddr_in peer;  socklen_t peer_len = sizeof(struct sockaddr_in);     // 这个初始化很重要  char buf[1024];  int accept_fd = accept(ser_sock, (struct sockaddr*)&peer, &peer_len);            //在调用函数accept()的时候,服务器就处于睡眠状态,当客户机发来一个请求并完成三次握手后accept()函数苏醒并且返回表示客户端socket的描述符。  if(accept_fd < 0)  {  perror("accept");  return 4;  }  else  {  printf("connected with ip: %s  and port: %d\n", inet_ntop(AF_INET,&peer.sin_addr, buf, 1024), ntohs(peer.sin_port));  }  while(1)  {  memset(buf, '\0', sizeof(buf));  ssize_t size = read(accept_fd, buf, sizeof(buf) - 1);  if(size > 0)  {  printf("client#: %s\n", buf);  }  else if(size == 0)  {  printf("read is done...\n");  break;  }  else   {  perror("read");  break;  }                     printf("server please enter: ");  fflush(stdout);                  size = read(0, buf, sizeof(buf) - 1);  if(size > 0)  {  buf[size - 1] = '\0';  }  else if(size == 0)  {  printf("read is done...\n");  break;  }  else  {  perror("read");  break;  }    write(accept_fd, buf, strlen(buf));  }close(ser_sock);  return 0;}

   
另:

 // 另一种读数据的方法 while ( (n = read(sockfd, recvBuff, sizeof(recvBuff)-1)) > 0)        {           ....    }       if(n < 0)      {          printf("\n Read error \n");      }   


0 0
原创粉丝点击