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库

     

      

    一生有所追!
  • 相关阅读:
    editable : false与 readonly 的区别
    Ubuntu环境下使用Jupyter Notebook查找桌面.csv文档的方法
    实验01——java模拟银行ATM系统
    Wannafly挑战赛26 御坂网络
    Wannafly挑战赛29 御坂美琴(递归,模拟)
    牛客练习赛31 龙魂合一萨坎与晶石
    牛客练习赛31
    Codeforces Round #520 (Div. 2)A. A Prank
    (花里胡哨)New Game!(牛客国庆集训派对Day1)
    Educational Codeforces Round 54 (Rated for Div. 2)A. Minimizing the String(签到题)
  • 原文地址:https://www.cnblogs.com/BlueBlue-Sky/p/8502631.html
Copyright © 2011-2022 走看看