zoukankan      html  css  js  c++  java
  • 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()
  • 相关阅读:
    在win2003中发布部署vs2010b2写的mvc2网站
    安装blender2.5Alpha0
    Win7下虚拟机个人使用小结:Virtual PC,VMware和VirtualBox
    ASP.NET AJAX Control Toolkit Beta 0911 发布[再增两控件]
    Camtasia 6录屏时鼠标闪烁问题解决
    为XNA制做安装程序(四)WIX Toolset 3.0 for Visual Studio 2008
    Oracle EM 12c
    无题
    从徐汇到虹口
    近况
  • 原文地址:https://www.cnblogs.com/resound/p/1818013.html
Copyright © 2011-2022 走看看