zoukankan      html  css  js  c++  java
  • network programming-简单的UDP客户/服务器模式

      无连接通信是通过UDP(User Datagram Protocol)/IP(Internet Protocol)协议来完成的,它不能确保可靠的数据传输,但能将数据发送到多个目标,或者接收多个源数据。相较于TCP等连接通信,无连接通信只要服务端先用socket()创建套接字,然后通过bind()绑定指定端口,不必调用listen()、accept(),只需要等待数据即可。

      UDP使用场景:1.网络数据大多是短消息;2.拥有大量的client;3.对数据安全性无特殊要求(当报文发送之后,是无法得知其是否安全完整到达的);4.网络负担非常重,但对响应速度要求高。应用在比如:网络视频会议系统的C/S网络应用。

    客户端程序流程

    step1 初始化Socket库

    step2 创建套接字

    SOCKET sClient = socket(AF_INET, SOCK_DGRAM, 0);

    step3 填写服务器地址

    sockaddr_in server;

    memset(&server, 0, sizeof(sockaddr_in));

    server.sin_family = AF_INET;

    server.sin_addr.s_addr = inet_addr(argv[1]);

    server.sin_port = htons((u_short)atoi(argv[2]));

    step4 与服务器通信(数据通讯),进行信息处理

    (发送数据)

    char buff[512] = {0};

    strcpy(buff, "I am client");

    int nRet = sendto(sClient, buff, strlen(buff)+1, 0, (struct sockaddr*)&server, sizeof(server));

    (接收数据)

    char buff[512];

    int nAddrLen = sizeof(server);

    memset(buff, 0, sizeof(buff));

    nRet = recvfrom(sClient, buff, sizeof(buff), 0, (struct sockaddr*)&server, &nAddrLen);

    step5 通信结束后关闭套接字

    step6 卸载Socket库

    服务器端程序流程

    step1 初始化Socket库

    step2 创建套接字

    SOCKET sListen= socket(AF_INET,SOCK_DGRAM,0)

    step3 创建本地实体,填写本机地址信息

    sockaddr_in local;

    memset(&local, 0, sizeof(local));

    local.sin_family = AF_INET;

    local.sin_addr.s_addr = INADDR_ANY;

    local.sin_port = htons((u_short)8888);

    step4  绑定一个固定的端口

    bind(sListen, (struct sockaddr *)&local, sizeof(local));

    step5 接收客户端的数据报,进行处理与通信

    接收数据

    struct sockaddr_in from;

    memset(&from, 0, sizeof(from));

    int fromLen = sizeof(from);

    char buff[512] = {0};

    recvfrom(sListen,buff, sizeof(buff), 0, (struct sockaddr*)&from, &fromLen);

    发送数据

    char buff[512] = {0};

    strcpy(buff, "I am server");

    sendto(sListen, buff, strlen(buff+1), 0, (struct sockaddr*)&from, fromLen);

    step6 通信结束后关闭套接字

    closesocket(sListen);

    step7 卸载Socket库

     

      

    一生有所追!
  • 相关阅读:
    html JS 打开本地程序及文件
    [转]jquery mobile中redirect重定向问题
    kafka中broker、producer、consumer主要配置参数说明
    手写一个LruCache
    ES发布时max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144] 错误
    UML类图
    JVM调优总结
    JVM学习系列(五) 常见的JVM参数
    JVM学习系列(四) 相关概念
    JVM学习系列(三) 虚拟机监控相关
  • 原文地址:https://www.cnblogs.com/BlueBlue-Sky/p/8502631.html
Copyright © 2011-2022 走看看