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

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

程序运行效果:

源代码下载地址:

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

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

C++ Socket UDP "Hello World!"的更多相关文章

  1. Nginx学习笔记(四) 源码分析&socket/UDP/shmem

    源码分析 在茫茫的源码中,看到了几个好像挺熟悉的名字(socket/UDP/shmem).那就来看看这个文件吧!从简单的开始~~~ src/os/unix/Ngx_socket.h&Ngx_s ...

  2. 重新想象 Windows 8 Store Apps (62) - 通信: Socket TCP, Socket UDP

    [源码下载] 重新想象 Windows 8 Store Apps (62) - 通信: Socket TCP, Socket UDP 作者:webabcd 介绍重新想象 Windows 8 Store ...

  3. 与众不同 windows phone (31) - Communication(通信)之基于 Socket UDP 开发一个多人聊天室

    原文:与众不同 windows phone (31) - Communication(通信)之基于 Socket UDP 开发一个多人聊天室 [索引页][源码下载] 与众不同 windows phon ...

  4. 消息队列、socket(UDP)实现简易聊天系统

    前言: 最近在学进程间通信,所以做了一个小项目练习一下.主要用消息队列和socket(UDP)实现这个系统,并数据库存储数据,对C语言操作数据库不熟悉的可以参照我的这篇博客:https://www.c ...

  5. bs结构socket(udp)通信

    以前我所做的基于socket通信都是采用cs结构,现公司有一个项目需要在bs中反控设备,于是研究了一番,现将成果公布,方便以后查阅. 服务端: #region udp int recv; byte[] ...

  6. 网络编程Socket UDP

    图表流程 linux udp测试代码 //server.c #include <stdio.h> #include <stdlib.h> #include <errno. ...

  7. Unity3d之Socket UDP协议

    原文地址:http://blog.csdn.net/dingkun520wy/article/details/49201245 (一)Socket(套接字)UDP协议的特点 1.是基于无连接的协议,没 ...

  8. c# socket udp广播

    一.广播消息 由于Tcp是有连接的,所以不能用来发送广播消息.发送广播消息,必须用到Udp,Udp可以不用建立连接而发送消息.广播消息的目的IP地址是一种特殊IP地址,称为广播地址.广播地址由IP地址 ...

  9. Unity Socket UDP

    using System.Collections; using System.Collections.Generic; using System.Net.Sockets; using System.N ...

随机推荐

  1. Log4Net 在多层项目中的使用小记

    原文地址:http://www.cnblogs.com/zdh8675/p/3645556.html 这几天刚好在调整一个项目,把一些自己不是很清楚的东西先试验一下,这篇文章主要是对我在项目中需要使用 ...

  2. nyoj89 汉诺塔(二)

    题目网址 :http://acm.nyist.net/JudgeOnline/problem.php?pid=89 汉诺塔问题的经典结论: 把i个盘子从一个柱子整体移到另一个柱子最少需要步数是 2的i ...

  3. 转载---SQL Server XML基础学习<1>之--FOR XML PATH

    --> 测试数据:#tbIF OBJECT_ID('TEMPDB.DBO.#tb') IS NOT NULL    DROP TABLE #tbGO CREATE TABLE #tb      ...

  4. jquery杂记之checkbox控制select置灰

    jquery: $(function(){ $("#avg_day_live").bind("click",function(){   //点击 if($(&q ...

  5. Fxcop 初体验

    代码质量对于软件项目的成败很重要,这点我想大家都明白.那么在一个软件团队中如何保证代码质量呢?对于这个问题不同的人可能会有不同的答案,对于我而言我觉得做好两点代码质量基本就可以保证了: 1.代码规范( ...

  6. python+sqlite3

    一个小例子, # -*- coding:utf-8 -*- ''' Created on 2015年10月8日 (1.1)Python 2.7 Tutorial Pt 12 SQLite - http ...

  7. 02_使用WebMagic爬虫获取CSDN推荐专家的个人博客信息

    本来是想抓取博客园的博客推荐的页面的,但由于一些博客进去的页面格式都不太相同,一时不想花时间去寻找规律,发现CSDN上面的格式较为单一,就决定以CSDN推荐专家的个人博客信息作为爬虫抓取的目标. [首 ...

  8. ERROR 1045 (28000): Access denied for user 'root'@'localhost'

    # /etc/init.d/mysql stop# mysqld_safe --user=mysql --skip-grant-tables --skip-networking &# mysq ...

  9. Qt 操作Excel

    Qt对Excel的数据读/写操作没有现存的类,需要使用QAxObject,下面是从网上下载下来的一个封装好的类,感觉还可以,一般情况下够用,拿来给大家分享. 头文件: #ifndef EXCELENG ...

  10. docker私有仓库

    1.docker pull registry 2.sudo docker run -d -p 5000:5000 registry 默认情况下,会将仓库存放于容器内的/tmp/registry目录下, ...