实现网络Socket客户端

1.客户端编程流程
这里写图片描述

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 <[email protected]>
 *      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;
}

猜你喜欢

转载自blog.csdn.net/m0_38022615/article/details/81414344
今日推荐