欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

实现网络Socket客户端

程序员文章站 2022-05-18 14:57:34
...

1.客户端编程流程
实现网络Socket客户端

2.客户端编程–具体实现
客户端编程思路:
1.socket(); 创建套接字
2.connect();发送连接请求
3.write(); read();连接后,进行通信
4.close();释放套接字

/*********************************************************************************
 *      Copyright:  (C) 2018 NULL
 *                  All rights reserved.
 *
 *       Filename:  socket_server.c
 *    Description:  This file 
 *                 
 *        Version:  1.0.0(2018年08月04日)
 *         Author:  DingHuanhuan <aaa@qq.com>
 *      ChangeLog:  1, Release initial version on "2018年08月04日 19时18分17秒"
 *                 
 ********************************************************************************/


#include <string.h>
#include <stdlib.h>
#include <stdio.h>
/*  sockaddr_in{} and other Internet define */ 
#include <sys/types.h> 
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
/*   strerror(),perror(), errno head file   */
#include <errno.h>  

#define  BUF_SIZE   1024
#define  Serv_IP    "192.168.2.2"
#define  port        12345
int main(char argc, char **argv)
{
    int      sockfd  = -1;           //创建一个套接字
    struct   sockaddr_in   serv_addr;//定义网络通信通用兼容的IPV4/IPV6结构体
    char     buf[BUF_SIZE];          //定义缓冲区

    sockfd  =  socket(AF_INET,SOCK_STREAM,0);//创建一个套接字,IPV4面向TCP连接

    if(sockfd < 0)         //若创建套接字出错
    {
      printf("creat socket failure:%s\n",strerror(errno));
      return -1;
    }

    printf("socket create fd is %d \n",sockfd); //打印套接字的文件描述符

    /* 连接服务器的准备,设置要连接的服务器的IP地址和端口号 */
    memset(&serv_addr,0,sizeof(serv_addr));//清空处理网络通信的地址的结构体
    serv_addr.sin_family = AF_INET;        //设置为IPV4地址
    serv_addr.sin_port   = htons(port);    //端口号,主机字节序转网络字节序
    inet_aton(Serv_IP,&serv_addr.sin_addr);//把字符串IP地址转换为一个32位网络序列IP地址
    printf ("设置 IP地址端口号成功\n");

    /* 连接服务端 */
    if(connect(sockfd,(struct sockaddr *)&serv_addr,sizeof(serv_addr))<0)
    {
      printf("connect to the server failure:%s\n",strerror(errno));
      return -2;
    }


    while(1)
    {
      memset(buf, 0, BUF_SIZE);
      printf("start to recv\n");
      if(recv(sockfd, buf ,BUF_SIZE,0)<0)
      {
          printf ("recv failure :%s\n",strerror(errno));
          return -4;
      }
      printf ("recv %s from the server\n",buf);
      sleep(2);
      if(send(sockfd,"Hello!\n",strlen("Hello!\n"),0)<0)
      {
          printf ("send failure :%s\n",strerror(errno));
          return -3;
      }
      printf ("send  is ok\n");
      sleep(2);
    }

   close(sockfd);

    return 0;
}