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并没有进行连接所以不用判断是否断开

  • 相关阅读:
    linux查看java jdk安装路径和设置环境变量
    linq where in 排序
    Console程序后台运行
    winform中文本框,软键盘跟随
    winform 应用log4net做日志记录到mysql
    c# 单实例运行
    Sql Server数据库监听 c#代码
    winform程序开机自动启动
    c# 连接mysql配置config,不用装net connector
    winform 不规则窗体无锯齿demo
  • 原文地址:https://www.cnblogs.com/CHYI1/p/5490103.html
Copyright © 2011-2022 走看看