这是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. BFM1

    BFM应该描述的是具有某种具体功能的电路.比如说,你的待测电路是一个智能卡,那他的BFM就是读卡器:那你就要根据协议,在BFM中描述出读卡器的具体行为. 写BFM就类似于写testbench了.BFM ...

  2. SQLServe错误整理

    1. sql拒绝访问?提示SQL Serve不存在或访问被拒绝 (SQL Server does not exist or access denied.) (A) 1:你如果是独立上网的请把21端口打 ...

  3. iframe父子窗口取值

    父窗口中操作iframe:window.frames["iframeChild"].document //假如iframe的id为iframeChild 在子窗口中操作父窗口:wi ...

  4. PHP中的ob_start() 的使用

    1.在PHP编程中, 我们经常会遇到一些直接产生输出的函数, 如passthru(),readfile(), var_dump() 等. 但有时我们想把这些函数的输出导入到文件中,或者先经过处理再输出 ...

  5. Lucene.net常用功能说明

    Lucene.net是一个.net下的全文检索类库.配置简单,功能丰富,比较成熟.我在项目中用Lucene.net有一段时间了,这里我把常用一些功能写出来,与大家一起分享. Lucene.net用的是 ...

  6. JQuery的几种页面加载完执行三种方式

      jquery加载页面的方法(页面加载完成就执行) 1. $(function(){ $("#a").click(function(){ //adding your code h ...

  7. 关于block块使用的6点注意事项

    对于刚学习OC新伙伴,block块一直都是一个比较纠结.比较难懂的知识点,不过,在使用一段时间后,就会感觉很酸爽.block块的原理及使用我就不再赘述,网上有很多这方面的资料.我个人使用这么长时间以来 ...

  8. C#中运用事件实现异步调用

    问题引出: winform程序中的耗时操作,一般不能在UI线程中执行,需要另开线程.往往我们需要在耗时操作结束后将结果显示在UI上. 以下是Mainform.cs中调用耗时操作的一段代码: Job j ...

  9. C#基础整理

    元旦整理书架发现一本小册子——<C#精髓>中国出版社2001年出版的,粗略翻了下关于C#的知识点挺全的虽然内容谈得很浅也有很多过时的内容(话说这本书是我在旧书店花5块钱淘的)我保留原有章节 ...

  10. (转)iOS学习之 plist文件的读写

    在做iOS开发时,经常用到到plist文件, 那plist文件是什么呢? 它全名是:Property List,属性列表文件,它是一种用来存储串行化后的对象的文件.属性列表文件的扩展名为.plist ...