• Win32 控制台下的UDP接收程序


    这是接收UDP数据的程序,为了简化程序的编写去掉了一些判断错误的地方:

    // mywsksvr.cpp : 定义控制台应用程序的入口点。
    #include "stdafx.h"
    #include
    <winsock.h>
    #include
    <stdio.h>
    #define RECVLEN 2000 // 接收缓冲区大小
    char buf[RECVLEN]; // 接收缓冲区
    #pragma comment(lib, "ws2_32.lib")

    int main()
    {
    WSADATA wWsadata;
    WORD wWord;
    wWord
    =MAKEWORD(1,1);
    if(!WSAStartup(wWord,&wWsadata))
    {
    //创建SOCKET
    SOCKET sock;
    if ( (sock = socket(AF_INET, SOCK_DGRAM ,0 /*IPPROTO_UDP*/)) != INVALID_SOCKET )
    {
    //在本地地址与端口绑定
    SOCKADDR_IN addr;
    addr.sin_addr.s_addr
    = htonl (INADDR_ANY);
    addr.sin_family
    = AF_INET;
    addr.sin_port
    = htons(60000); // 端口要和发送端一致才能收到
    // 绑定
    bind(sock, (SOCKADDR *)&addr,sizeof(SOCKADDR));
    //接收数据
    SOCKADDR_IN addrClient; // 这个地址在recvfrom收到数据后,存储有发送端的地址
    int len=sizeof(SOCKADDR);
    int a, n;
    fd_set readfds;
    timeval timeout
    ={5,0}; // 超时时间为5秒,后面的那个数是微秒值
    while(1)
    {
    FD_ZERO(
    &readfds); // 清空readfds与所有句柄的联系
    FD_SET(sock,&readfds); // 建立readfds与sock的联系
    n = select(0, &readfds, NULL, NULL, &timeout);//接收数据
    if(n> 0)
    {
    a
    =recvfrom(sock,buf,RECVLEN,0,(SOCKADDR*)&addrClient,&len);
    printf(
    "recv %s ,len=%d \n",buf,a);
    if (a == SOCKET_ERROR) //错误
    printf("*** ERROR. CODE =%d\n",WSAGetLastError());
    }
    else
    {
    printf(
    "%ds recv timeout\n ",timeout.tv_sec);
    }
    }
    closesocket(sock);
    WSACleanup();
    }
    }
    }
    //endof main()
  • 相关阅读:
    CSS3实现平行四边形
    [Python]图的遍历-DFS
    [Python]图的遍历-BFS
    [Python]图的遍历-拓扑排序
    [Python]哈夫曼编码
    [Python]贪心算法-Prim-和-Kruskal实现-最小生成树
    [Python]贪心算法-Dijkstra-实现
    [python3]稳定匹配算法实现和优化
    从csv文件构建Tensorflow的数据集
    Tensorflow 基础API
  • 原文地址:https://www.cnblogs.com/resound/p/1818013.html
Copyright © 2020-2023  润新知