zoukankan      html  css  js  c++  java
  • Linux网络编程的一般步骤

    服务端:一般服务端首先要将服务打开,在Linux中,网络服务的创建步骤基本上差不多.基本上这些代码都是可以通用的.

    #include <unistd.h>
    #include <sys/types.h>
    #include <sys/socket.h>
    #include <netinet/in.h>
    #include <netinet/ip.h>
    #include <netdb.h>

    static int create_server(short port)
    {
    int sockfd;  //网络监听套接字
    struct sockaddr_in self;  //网络信息的结构体
    int ret;  //接收返回值判断函数知否出错


    /*创建网络套接字,参数:AF_INET表示IPv4,指定地址协议类型.SOCK_STREAM表示TCP协议,指定传输协议,也可以是UDP,原始网络传输协议等,0表示传输协议编号,通常默认为0,而且通常不用管*/
    sockfd = socket(AF_INET, SOCK_STREAM, 0);
    if(sockfd == -1){//返回值-1为出错
    perror("socket");
    return -1;
    }

    memset(&self,0,sizeof(self));//将网络信息的接收体初始化
    self.sin_family = AF_INET;//网络信息结构体中的网络地址协议信息
    self.sin_port = htons(port);//网络信息结构体中的端口信息
    self.sin_addr.s_addr = htonl(INADDR_ANY);//网络信息结构体中的IP地址的信息,INADDR_ANY表示采用本机已经获得的IP地址

    /*将IP和网络套接字进行绑定,参数:sockfd,网络套接字,第二个参数为网络信息的结构体转网络地址结构体,该参数为指针,第三个参数为指针指向的长度*/
    ret = bind(sockfd,(struct sockaddr *)&self,sizeof(self));
    if(ret == -1){//返回值为-1则出错
    perror("bind");
    return -1;
    }

    listen(sockfd,5);//对该网络套接字进行监听,第二个参数为可监听的最大连接数
    printf("listen... ");

    return sockfd;
    }

    listen_fd = create_server(80);//返回网络监听套接字

    sock_fd = accept(listen_fd , (struct sockaddr *)&client , &len);//等待客户端连接,没有客户端连接的话进入阻塞状态

    客户端:

    sockfd = socket(AF_INET, SOCK_STREAM, 0);
    if (-1 == sockfd){
    perror("socket");
    exit(-1);
    }

    memset(&dest,0,sizeof(dest));
    dest.sin_family = AF_INET;
    dest.sin_port = htons(port);
    inet_aton(argv[1],&dest.sin_addr);
    //如果是UDP协议该Connect函数不用写,直接使用socket发送数据
    ret = connect(sockfd,(struct sockaddr *)&dest, sizeof(dest));

    接收和发送数据:

    TCP:

    发送函数:

    int send(int s,const void *mes,int len,unsigned int falgs);

    参数:第一个:已经连接成功的套接字

    第二个:要发送的内容的指针

    第三个:指针指向内容的长度

    第四个:发送的选项,默认为0

    返回值-1出错,成功返回发送成功的字节数

    接收函数:

    int recv(int s,void *buf,int len,unsigned int flags);

    参数:第一个已经连接成功的套接字

    第二个:要发送的数据的指针

    第三个:要发送的数据的指针的长度

    第四个:接收的选项,默认为0

    返回值-1出错,成功返回发送接收的字节数,0为对方断开连接

    UDP:

    发送函数:

    int sendto(int s,const void *mes,int len,unsigned int flags,const sockaddr * to,int to len);

    参数:第一个:套接字

    第二个:要发送的内容的指针

    第三个:指针指向内容的长度

    第四个:对方主机的地址信息的指针

    第五个:对方主机的地址信息的指针的长度

    返回值:-1出错,成功返回成功发送的字节数

    接收函数:

    int recvfrom(int s,void *buf,int len ,unsigned int flags,struct sockaddr *from,int *fromlen);

    参数:第一个已经连接成功的套接字

    第二个:要发送的数据的指针

    第三个:要发送的数据的指针的长度

    第四个:对方主机的地址信息的指针

    第五个:对方主机的地址信息的指针的长度

    返回值:-1出错,成功返回成功接收的字节数,因为UDP并没有进行连接所以不用判断是否断开

  • 相关阅读:
    topcoder srm 445 div1
    topcoder srm 440 div1
    topcoder srm 435 div1
    topcoder srm 430 div1
    topcoder srm 400 div1
    topcoder srm 380 div1
    topcoder srm 370 div1
    topcoder srm 425 div1
    WKWebView强大的新特性
    Runtime那些事
  • 原文地址:https://www.cnblogs.com/CHYI1/p/5490103.html
Copyright © 2011-2022 走看看