我们专注攀枝花网站设计 攀枝花网站制作 攀枝花网站建设
成都网站建设公司服务热线:400-028-6601

网站建设知识

十年网站开发经验 + 多家企业客户 + 靠谱的建站团队

量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决

unixsocket网络编程TCP简单例子-创新互联

成都创新互联是一家专注于成都网站制作、网站建设与策划设计,连江网站建设哪家好?成都创新互联做网站,专注于网站建设十载,网设计领域的专业建站公司;建站业务涵盖:连江等地区。连江做网站价格咨询:18980820575
  1. server.c
  2. #include 
  3. #include 
  4. #include 
  5. #include 
  6. #include 
  7. #include 
  8. #include 
  9. #include 
  10. int main(int argc, char** argv)
  11. {
  12.     int ret;
  13. //创建socket文件
  14.     int sockfd = socket(AF_INET, SOCK_STREAM, 0);
  15.     if(sockfd == -1)
  16.     {
  17.         perror("socket\n");
  18.         exit(1);
  19.     }
  20.     printf("socket_fd = %d\n",sockfd);
  21. //重复使用本地址与socket文件进行绑定,如果不设置系统,会保留此连接直到最后一引用才释放,即进程结束后系统需要几分钟后才能重新进行绑定
  22.     int i = 1;
  23.     ret = setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, &i, sizeof(i));
  24.     if(ret)
  25.     {
  26.         perror("setsockopt\n");
  27.         exit(1);
  28.     }
  29.     printf("setsockopt complete!\n");
  30. //创建服务器socket地址sock_addr
  31.     struct sockaddr_in server_addr;
  32.     server_addr.sin_family = AF_INET;
  33.     server_addr.sin_port = htons(4444);
  34.     //地址指定INADDR_ANY表示可以接收安装在系统里面所有网卡的数据包
  35.     server_addr.sin_addr.s_addr = INADDR_ANY;
  36.     memset(server_addr.sin_zero, 8, 8);
  37. //将socket与地址进行绑定,这样可以使所有发向端口4444及协议为IPV4数据包指向socket文件
  38.     ret =  bind(sockfd, (struct sockaddr*)&server_addr, sizeof(struct sockaddr));
  39.     if(ret)
  40.     {
  41.         perror("bind\n");
  42.         exit(1);
  43.     }
  44.     printf("bind complete!\n");
  45. //监听连接到该socket上请求,不会发生阻塞行为,以下设置队列大小为1,即队列满的时候其它连接会被拒绝连接
  46.     ret = listen(sockfd, 10);
  47.     if(ret)
  48.     {
  49.         perror("listen\n");
  50.         exit(1);
  51.     }
  52.     printf("listen complete!\n");
  53. //接收连接请求并建立连接, 如果没有连接请求 accept会一址阻塞,直到有请求来
  54.     struct sockaddr_in client_addr;
  55.     int client_fd;
  56.     socklen_t len = sizeof(struct sockaddr);
  57.     client_fd = accept(sockfd, (struct sockaddr*)&client_addr, &len);
  58.     if(client_fd == -1)
  59.     {
  60.         perror("bind\n");
  61.         exit(1);
  62.     }
  63.     printf("accept complete!\n");
  64. //请取client发来的信息
  65.     char buf[100];
  66.     ssize_t readnum;
  67.     memset(buf,100,0);
  68. //这里应该是客户端的socket文件描述符
  69.     readnum = recv(client_fd, (void*)buf, 100, MSG_WAITALL);
  70.     //清空标准输出
  71.     fflush(stdout);
  72.     printf("received:%s\nnumber byte:%d\n",buf,strlen(buf));
  73. //发送信息到用户端
  74.     ssize_t sendnum;
  75.     char content[100]="\"server:received the data!\"";
  76.     sendsendnum = send(client_fd, content, 100, 0);
  77.     printf("reply:%s\nnumber byte:%d\n",content,sendnum);
  78. // 关闭socket文件
  79.     close(sockfd);
  80.     close(client_fd);
  81.     return 0;
  82. }
  83. client.c
  84. #include 
  85. #include 
  86. #include 
  87. #include 
  88. #include 
  89. #include 
  90. #include 
  91. #include 
  92. #include 
  93. int main(int argc, char** argv)
  94. {
  95.     int ret;
  96. //创建socket文件
  97.     int sockfd = socket(AF_INET, SOCK_STREAM, 0);
  98.     if(sockfd == -1)
  99.     {
  100.         perror("socket\n");
  101.         exit(1);
  102.     }
  103.     printf("socket_fd = %d\n",sockfd);
  104. //创建服务器socket地址sock_addr
  105.     struct sockaddr_in server_addr;
  106.     server_addr.sin_family = AF_INET;
  107.     server_addr.sin_port = htons(4444);
  108.     //将字符串地址转换成网络地址,有两种方法
  109.     inet_pton(AF_INET, "127.0.0.1", (void*)&server_addr.sin_addr.s_addr);//IPV4 IPV6可用
  110.     //server_addr.sin_addr.s_addr = inet_addr("127.0.0.1");//只能转IPV4
  111.     memset(server_addr.sin_zero, 8, 0);
  112. //连接服务端
  113.     ret = connect(sockfd, (struct sockaddr*)&server_addr,sizeof(struct sockaddr));
  114.     if(ret == -1)
  115.     {
  116.         perror("connect\n");
  117.         exit(1);
  118.     }
  119.     printf("connect complete!\n");
  120. //发送信息
  121.     char content[100] = "\"hello,i am client!\"";
  122.     ssize_t sendsendnum = send(sockfd, content, strlen(content)+1, 0);
  123.     printf("send complete\nnumber byte:%d\ncontent:%s\n",sendnum,content);
  124. //收信息
  125.     char buf[100];
  126.     ssize_t readnum;
  127.     memset(buf,100,0);
  128.     readnum = recv(sockfd, (void*)buf, 100, MSG_WAITALL);
  129.     //清空标准输出
  130.     fflush(stdout);
  131.     printf("received:%s\nnumber byte:%d\n",buf,strlen(buf));
  132. //关闭socket
  133.     close(sockfd);
  134.     return 0;
  135. }

另外有需要云服务器可以了解下创新互联cdcxhl.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。


本文名称:unixsocket网络编程TCP简单例子-创新互联
链接地址:http://shouzuofang.com/article/dhjegj.html

其他资讯