• C++ Socket UDP "Hello World!"


    这是C++ SOCKET网络程序中的C/S结构之UDP "Hello World !",共两个控制台工程:

    [cpp] view plain copy
     
     print?
    1. //////////////////////////////////////////////////////////////////////////  
    2. // UDPServer.cpp  
    3.   
    4. #include <stdio.h>  
    5. #include <WINSOCK2.H>  
    6.   
    7. #pragma comment(lib,"WS2_32.lib")  
    8. #define BUF_SIZE    64  
    9.   
    10. int main(void)  
    11. {  
    12.     WSADATA wsd;  
    13.     SOCKET  s;  
    14.     int     nRet;  
    15.   
    16.     // 初始化套接字动态库  
    17.     if(WSAStartup(MAKEWORD(2,2),&wsd) != 0)  
    18.     {  
    19.         printf("WSAStartup failed !/n");  
    20.         return 1;  
    21.     }  
    22.   
    23.     // 创建套接字  
    24.     s = socket(AF_INET,SOCK_DGRAM,0);  
    25.     if(s == INVALID_SOCKET)  
    26.     {  
    27.         printf("socket() failed ,Error Code:%d/n",WSAGetLastError());  
    28.         WSACleanup();  
    29.         return 1;  
    30.     }  
    31.   
    32.     SOCKET      socketSrv = socket(AF_INET,SOCK_DGRAM,0);  
    33.     SOCKADDR_IN addrSrv;  
    34.     SOCKADDR_IN addrClient;  
    35.     char        buf[BUF_SIZE];  
    36.     int         len = sizeof(SOCKADDR);  
    37.   
    38.     // 设置服务器地址  
    39.     ZeroMemory(buf,BUF_SIZE);  
    40.     addrSrv.sin_addr.S_un.S_addr = htonl(INADDR_ANY);  
    41.     addrSrv.sin_family = AF_INET;  
    42.     addrSrv.sin_port = htons(5000);  
    43.   
    44.     // 绑定套接字  
    45.     nRet = bind(socketSrv,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR));  
    46.     if(SOCKET_ERROR == nRet)     
    47.     {     
    48.         printf("bind failed !/n");     
    49.         closesocket(s);     
    50.         WSACleanup();     
    51.         return -1;     
    52.     }  
    53.   
    54.     // 从客户端接收数据  
    55.     nRet = recvfrom(socketSrv,buf,BUF_SIZE,0,(SOCKADDR*)&addrClient,&len);  
    56.     if(SOCKET_ERROR == nRet)     
    57.     {     
    58.         printf("recvfrom failed !/n");     
    59.         closesocket(s);     
    60.         WSACleanup();     
    61.         return -1;     
    62.     }  
    63.     // 打印来自客户端发送来的数据  
    64.     printf("Recv From Client:%s/n",buf);  
    65.   
    66.     // 向客户端发送数据  
    67.     sendto(socketSrv,"UDP Hello World !",sizeof("UDP Hello World !"),0,(SOCKADDR*)&addrClient,len);  
    68.     closesocket(s);  
    69.     WSACleanup();  
    70.     return 0;  
    71. }  
    [cpp] view plain copy
     
     print?
    1. //////////////////////////////////////////////////////////////////////////  
    2. // UDPClient.cpp  
    3.   
    4. #include <stdio.h>  
    5. #include <WINSOCK2.H>  
    6.   
    7. #pragma comment(lib,"WS2_32.lib")  
    8. #define BUF_SIZE    64  
    9.   
    10. int main(void)  
    11. {  
    12.     WSADATA wsd;      
    13.     SOCKET  s;  
    14.   
    15.     // 初始化套接字动态库  
    16.     if(WSAStartup(MAKEWORD(2,2),&wsd) != 0)  
    17.     {  
    18.         printf("WSAStartup failed !/n");  
    19.         return 1;  
    20.     }  
    21.   
    22.     // 创建套接字  
    23.     s = socket(AF_INET,SOCK_DGRAM,0);  
    24.     if(s == INVALID_SOCKET)  
    25.     {  
    26.         printf("socket() failed, Error Code:%d/n",WSAGetLastError());  
    27.         WSACleanup();  
    28.         return 1;  
    29.     }  
    30.   
    31.     char        buf[BUF_SIZE];  // 接受数据  
    32.     SOCKADDR_IN servAddr;       // 服务器套接字地址  
    33.     SOCKET      sockClient = socket(AF_INET,SOCK_DGRAM,0);  
    34.     int         nRet;  
    35.   
    36.     ZeroMemory(buf,BUF_SIZE);  
    37.     strcpy(buf,"UDP Hello World !");  
    38.   
    39.     // 设置服务器地址  
    40.     servAddr.sin_family = AF_INET;  
    41.     servAddr.sin_addr.S_un.S_addr = inet_addr("192.168.1.254");  
    42.     servAddr.sin_port = htons(5000);  
    43.   
    44.     // 向服务器发送数据  
    45.     int nServAddLen = sizeof(servAddr);  
    46.     if(sendto(sockClient,buf,BUF_SIZE,0,(sockaddr *)&servAddr,nServAddLen) == SOCKET_ERROR)  
    47.     {  
    48.         printf("recvfrom() failed:%d/n",WSAGetLastError());  
    49.         closesocket(s);  
    50.         WSACleanup();  
    51.         return 1;  
    52.     }  
    53.     nRet = recvfrom(sockClient,buf,BUF_SIZE,0,(sockaddr *)&servAddr,&nServAddLen);  
    54.     if(SOCKET_ERROR == nRet)     
    55.     {     
    56.         printf("recvfrom failed !/n");     
    57.         closesocket(s);     
    58.         WSACleanup();     
    59.         return -1;     
    60.     }  
    61.   
    62.     // 打印来自服务端发送来的数据  
    63.     printf("Recv From Server:%s/n",buf);  
    64.     closesocket(s);  
    65.     WSACleanup();  
    66.     return 0;  
    67. }  

    程序运行效果:

    UDP Hello World!

    源代码下载地址:

    http://www.rayfile.com/files/733c832e-a2d8-11de-a838-0014221b798a/

    http://blog.csdn.net/wangningyu/article/details/4560835

  • 相关阅读:
    概要设计
    JNI内存泄露
    Flash 与 JS 交互
    Lucene.net 实现全文搜索(转)
    自动打开登录游戏的代码
    Ajax,网站改版的一种方法
    IE6/IE7和Firefox对Div处理的差异(转)
    搜VC里找到的
    C# 尝试读取或写入受保护的内存。这通常指示其他内存已损坏
    HTML特殊转义字符列表
  • 原文地址:https://www.cnblogs.com/findumars/p/5928712.html
Copyright © 2020-2023  润新知