**************************************************
*  本文由小鸟飞飞整理发表 <samboy@sohu.com>   *
* 首发网站:蓝丽网               *
*  其他网站转载请保留以上信息,谢谢!      *
**************************************************

   又是出差,一个半月啊,烦死了。好在终于回来了。要过年了,先在这里给大家拜个早年吧,祝大家新年快乐。

  有一些朋友给我发短信问一 些Socket方面的问题,因为一直出差没时间回复在这里说声报谦,先给大家发一节网络编程的内容吧,希望对朋友们有所帮助。

  网络编 程的主要内容是网络协议,如TCP、UDP、SMTP、POP3等,要想做好网络编程首先要了解这些协议。网络通信主要有两种方式:同步和异步。网络程序 主要有两种程序:发送端和接收端。这里只给大家介绍一下网络编程的基本思路,希望能起到抛砖引玉的作用。

一、UDP通信
   UDP通信属于一种异步通信,发送端的程序发出信息后不论接收端是否收到都将继续执行下面的程序。
  1、初始化DLL:Windows Socket编程用到SocketDLL库,所以在使用之前必须先进行初始化工作。Socket DLL也分为不同的几个版本,需要指定使用的DLL库的版本。

WSADATA wsaData;
WSAStartup(MAKEWORD(1,1), &wsaData); // 第一个参数就是Socket版本号

   2、生成Socket:Socket首先要指定所使用的地址协议,通信协议,UDP通信程序必须指定为SOCK_DGRAM。

SOCKET s = socket(AF_INET, SOCK_DGRAM, 0);
// Protocol to be used with the socket that is specific to the indicated address family.
//这是MSDN中对第三个参数的说明,不知道怎么解释了。

  3、Bind:这是最重要的一 步,需要将生成的Socket与IP地址和端口号建立对应关系。

SOCKADDR_IN sockSrc;
sockSrc.sin_family = AF_INET;
sockSrc.sin_port = htons(3000);
sockSrc.sin_addr.S_un.S_addr = htonl(INADDR_ANY);
bind(s, (SOCKADDR *)&sockSrc, sizeof(SOCKADDR));
  说明:1) bind函数需要指定IP地址和端口号,IP地址必须是执行这个程序所在的计算机的IP地址,将其设定为INADDR_ANY,系统会自动将计算机的IP 地址填入。端口号是用以区别数据是发给哪个网络程序的,端口号是一个两个字节的整数,应把它设在1024到5000之间的值,若设为0,则由系统自动分配 一个适当的数值。
  2)由于各种计算机的数据读取方式不同(如PC与UNIX系统),所以在指定端口和IP地址时,要把它们从主机次序转换到网 络次序。Htons, Htonl函数实现这种功能。

  4、发送/接收数据:

SOCKADDR_IN sockDest;
sockDest.sin_family = AF_INET;
sockDest.sin_port = htons(3001);
sockDest.sin_addr.S_un.S_addr = inet_addr("192.168.0.36");
char buf[1024];
strcpy(buf, "Hello Internet!");
sendto(s, buf, strlen(buf)+1, 0, (SOCKADDR*)&sockDest, sizeof(SOCKADDR));

SOCKADDR_IN sockFrom;
char buf[1024];
memset(buf, 0, 1024);
int len = sizeof(SOCKADDR);
int x=recvfrom(s, buf, 1024, 0, (SOCKADDR*)&sockFrom, &len);

  说明:inet_addr用于将固定格式的字符串(形如 “192.168.0.36”)转换为一个整数,对应的有inet_ntoa用于将整数转换为“192.168.0.36”形式的字符串。

   5、关闭Socket:closesocket(s);
  6、释放DLL:WSACleanup();

  7、头文 件:winsock2.h、LIB:Ws2_32.lib

SOCKADDR_IN 是输入Internet地址的结构体,可以参考MSDN的说明。

1.6 网络编程之 UDP通信相关推荐

  1. 网络编程之UDP通信

    一.UDP简介 UDP 是User Datagram Protocol的简称, 中文名是用户数据报协议,是OSI(Open System Interconnection,开放式系统互联) 参考模型中一 ...

  2. Python中的网络编程之UDP

    Python中的网络编程之UDP 文章目录 Python中的网络编程之UDP 一.Socket编程 `1.什么是客户端/服务器架构`? **`2.套接字:通信端点`** 3.套接字地址:主机-端口对 ...

  3. 萌新解--Java网络编程之UDP

    Java网络编程之UDP UDP协议为无连接的通信协议,在传数据前发送端与接收端不会先建立连接,也就是你发我就收但不一定会收到哦,以我们自身为发送端,我们不会事先让接收方知道我要给接收方发数据啦.就像 ...

  4. 2-3:套接字(Socket)编程之UDP通信,sockaddr,sockaddr_in,recvfrom,sendto

    文章目录 一:回顾 二:彻底了解套接字和struct socket结构 (1)一切皆文件-文件描述符-套接字描述符 (2)struct socket结构 A:struct socket结构体作用 B: ...

  5. 嵌入式学习之QT学习---8 QT网络编程之TCP通信

    前言: Qt网络模块提供了用于编写TCP/IP客户端和服务器端程序的各种类,如用于TCP通信的QTcpSocket和QTcpServer,用于UDP通信的QUdpSocket,还有用于实现HTTP.F ...

  6. Java网络编程之UDP和TCP套接字

    文章目录 一. 网络编程概述 二. UDP网络编程 1. UDP套接字 2. UDP客户端回显服务器程序 2.1 UDP回显服务器 2.2 UDP客户端 2.3 UDP实现查词典的服务器 三. TCP ...

  7. java udp 同一个端口实现收发_Java网络编程之UDP协议

    伙伴们注意了! 小编在这里给大家送上关注福利: 搜索微信公众号"速学Java"关注即可领取小编精心准备的资料一份! 今天我们来聊聊 网络编程这部分的内容 网络编程 1)计算机网络 ...

  8. java网络编程udp_Java网络编程之UDP

    UDP是User Datagram Protocol的简称,中文名是用户数据报协议,是OSI(Open System Interconnection,开放式系统互联)参考模型中一种无连接的传输层协议, ...

  9. Linux C高级编程——网络编程之UDP(4)

    Linux网络编程--UDP 宗旨:技术的学习是有限的,分享的精神是无限的. 下面分析一帧基于UDP的TFTP协议帧. 以太网首部 0000: 00 05 5d 67 d0 b1 00 05 5d 6 ...

最新文章

  1. Java 程序员必须掌握的 10 款开源工具!
  2. Centos下GCC引用mysql头文件和库文件
  3. minecraft666java_我的世界的666的世界
  4. [leetcode] Container With Most Water
  5. JUnit4中使用Hamcrest测试框架的assertThat断言 小实例
  6. 【直播预告 | 今天10:30】多媒体技术PI第三期:网络传输
  7. 前端自动化之nvm安装
  8. 2 数据源配置_Spring, MyBatis 多数据源的配置和管理
  9. 继承的方式编写日向家族
  10. 缓冲区分析—ArcGIS API for JavaScript
  11. 51单片机c语言两个变量比对,51单片机C语言编程技巧
  12. VS2010安装教程
  13. 阿里云短信sdk的懒人用法
  14. 请高手指点,简单的几个数组操作方法不知道是否可以有更好的改进方法或者更简单的方法?
  15. Java实现 LeetCode 34 在排序数组中查找元素的第一个和最后一个位置
  16. [nRF52832] 外设篇 | 实验一 LED 灯 及 BUTTON 按键
  17. R语言学习笔记(一)
  18. 人体神经网络的组成部分,人体的神经网络是什么
  19. 软件工程毕业设计课题(78)微信小程序毕业设计PHP校园食堂就餐预约小程序系统设计与实现
  20. java_猜拳小游戏——流之奥义

热门文章

  1. 用户操作-用户详情查询流程分析
  2. Hystrix Dashboard的使用与常见问题总结
  3. SpringBoot_入门-HelloWorld细节-自动配置
  4. 单一职责原理讲解coding
  5. 由若干计算机网络连接而成的网络,计算机网络复习大纲(中山大学)
  6. centos7上systemd详解
  7. 计算机领域中,增量是什么意思?
  8. 代画PCB及C语言编程
  9. jar包不统一也会报错:Exception in thread main java.lang.NoClassDefFoundError
  10. WRC 2017最值得关注的专题论坛之一,与大咖探讨青年科学家的创新创业