• 【实验 1-2】编写一个简单的 UDP 服务器和 UDPP 客户端程序。程序均为控制台程序窗口。


    1.服务器

    #include<winsock2.h> //包含头文件
    #include<stdio.h>
    #include<windows.h>
    #pragma comment(lib,"WS2_32.lib") //连接套接字库
    int main()
    {
    WSADATA data; //定义结构体变量
    WORD w=MAKEWORD(2,0); //定义套接字版本
    char sztext[]="欢迎你 "; //定义欢迎信息
    ::WSAStartup(w,&data); //初始化套接字库
    SOCKET s; //定义套接字句柄
    s=::socket(AF_INET,SOCK_DGRAM,0); //创建 UDP 套接字
    sockaddr_in addr,addr2; //定义套接字地址结构变量
    int n=sizeof(addr2); //获取套接字地址结构变量大小
    char buff[11]={0}; //接收数据缓冲区
    addr.sin_family=AF_INET; //初始化地址结构
    addr.sin_port=htons(75);
    addr.sin_addr.S_un.S_addr=INADDR_ANY;
    ::bind(s,(sockaddr*)&addr,sizeof(addr));//绑定套接字
    printf("UDP 服务器已经启动 ");//显示提示信息
    while(1)
    {
    if(::recvfrom(s,buff,11,0,(sockaddr*)&addr2,&n)!=0) //接收客户端信息
    {
    printf("%s 已经连接上 ",inet_ntoa(addr2.sin_addr));
    printf("%s ",buff);
    ::sendto(s,sztext,sizeof(sztext),0,(sockaddr*)&addr2,n); //发送数据到客户端
    break;
    }
    }
    ::closesocket(s); //关闭套接字对象
    ::WSACleanup(); //释放套接字库
    if(getchar()) //如果有输入则关闭程序
    {
    return 0; //正常结束程序
    }
    else
    {::Sleep(100); //应用程序睡眠
    }
    }

    2.客户端

    #include<winsock2.h> //包含头文件
    #include<stdio.h>
    #include<windows.h>
    #pragma comment(lib,"WS2_32.lib") //连接套接字库
    int main()
    {
    WSADATA data; //定义结构体变量
    WORD w=MAKEWORD(2,0); //初始化套接字版本号
    char sztext[]="服务器,你好! "; //定义字符数组显示连接信息
    ::WSAStartup(w,&data); //初始化套接字库
    SOCKET s; //定义套接字
    s=::socket(AF_INET,SOCK_DGRAM,0); //创建 UDP 套接字
    sockaddr_in addr,addr2; //定义套接字地址
    int n=sizeof(addr2);
    char buff[10]={0};
    addr.sin_family=AF_INET; //初始化地址结构
    addr.sin_port=htons(75);
    addr.sin_addr.S_un.S_addr=inet_addr("127.0.0.1");
    printf("UDP 客户端已经启动 ");
    if(::sendto(s,sztext,sizeof(sztext),0,(sockaddr*)&addr,n)!=0) //发送信息
    {
    ::recvfrom(s,buff,10,0,(sockaddr*)&addr2,&n); //接受信息
    printf("服务器说:%s ",buff);
    ::closesocket(s); //关闭套接字
    ::WSACleanup(); //释放套接字库
    }
    if(getchar()) //如果有输入则关闭程序
    {
    return 0; //正常结束程序
    }
    else
    {::Sleep(100);
    }
    }

  • 相关阅读:
    Vue 封装js 并 引用
    Vue todolist练习 知识点
    Vue 双向数据绑定、事件介绍以及ref获取dom节点
    Vue 目录结构 绑定数据 绑定属性 循环渲染数据
    Vue自学笔记--项目的创建
    sqlalchemy第一部分
    mysql查询补充
    mysql数据库查询操作
    mysql数据库关系操作
    数据表的约束及数据类型操作
  • 原文地址:https://www.cnblogs.com/chengJAVA/p/3343345.html
Copyright © 2020-2023  润新知