这是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. CentOS7下用jdk1.7编译hadoop-2.7.1全过程详解

    说实话,本人编译hadoop的过程比较曲折,但收获也很多,下面系统介绍一下CentOS7下编译hadoop-2.7.1的全过程吧. 先说明,32位Linux操作系统可以直接下载编译好的hadoop使用 ...

  2. Js~数组的操作push,pop,shift,unshift

    说几个概念: 队列:先进先出堆栈:先进后出 shift:从集合中把第一个元素删除,返回这个元素的值pop:从集合中把最后一个元素删除,返回这个元素的值 unshift:在集合开头添加一个或者多个元素, ...

  3. js页面之间函数调用

    1.在父级页面调用子级页面的函数 当前页面(default.aspx)通过iframe嵌套index.aspx页面,在当前页面调用index.aspx里面的js函数,如下: myFrame.windo ...

  4. ORA-12011+ORA-06512–job执行失败问题

    oracle库中的一个job,正常运行了一年多,因某种原因导致无法运行,系统尝试多次均失败之后下次执行时间就变成了 4000/1/1. 现导致job失败的问题已经解决,从新运行job时报 12011和 ...

  5. VC中动态添加控件

    VC中动态添加控件 动态控件是指在需要时由Create()创建的控件,这与预先在对话框中放置的控件是不同的. 一.创建动态控件: 为了对照,我们先来看一下静态控件的创建. 放置静态控件时必须先建立一个 ...

  6. SqlServer Alter Table 语句的用法

    更改 字段的数据类型 Alter Table TB_ITM_ITEM alter column is_timing int NULL; 新增字段: alter table WeiboSmartCate ...

  7. java web-----servelet

    1,定义servlet: 2,servlet生命周期: 3,HttpServlet常用方法: 4,servlet常用接口: 一,servlet定义: servlet是一个继承HttpServlet类的 ...

  8. 02_Jquery_01_id选择器

    首先建立建立一个JavaWeb项目工程,导入jquery-1.5.1.js. (一)选择器--打印文本内容 [index.jsp] <%@ page language="java&qu ...

  9. grunt-mac上安装运行构建工具的总结(一)

    安装node.js brew install node.js 安装grunt npm install -g grunt-cli 1.新建package.json,配置 { "name&quo ...

  10. Eyeshot Ultimate 学习笔记(2)

    导入模型 一般情况下,我们自己搭建模型的功力还不够,大多都是在3Dmax中做好模型,导出成模型文件,然后再导入Eyeshot视图中.导入的代码包括: OpenFileDialog openFileDi ...