社区
非技术区
帖子详情
咨询UDP发送广播包的问题
stm32f103vct
2016-04-11 09:12:44
用UDP 发送广播包,请问有什么代码例程?求学习谢谢。
...全文
196
1
打赏
收藏
咨询UDP发送广播包的问题
用UDP 发送广播包,请问有什么代码例程?求学习谢谢。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
1 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
ArmStronger
2016-04-12
打赏
举报
回复
http://www.cnblogs.com/ShaYeBlog/archive/2012/09/26/2703991.html
百度一大把
飞鸽传书(IPMessenger) 源码
软件简介 飞鸽传书(IP Messenger),是由日本人Shirouzu Hiroaki (白水 启章)所发明的免费软件, 是一款局域网内即时通信软件,基于 TCP/IP(
UDP
)。可运行于多种操作平台(Win/Mac/UNIX/Java),并实现跨平台信息交流。不需要服务器支持, 支持文件/文件夹的传送 (2.00版以上),通讯数据采用 RSA/Blofish 加密 (2.00版以上),十分小巧,简单易用,而且你可以完全免费使用它。目前已有的版本
包
括: Win32, Win16, MacOS, MacOSX, X11, GTK, GNOME,Java 等, 并且公开源代码. 系统要求 Microsoft Windows 95/98/Me/NT4.0/2000/XP/2003 95/98/NT4.0 ... 要求 comctl32.dll(公共控件) 的版本为 5.x 或更高. (如果你安装的 IE 是 5.x 或更高版本, 那么就不必担心这个
问题
了) 注意: Windows 3.1(和 NT3.5x), 请使用 IP Messenger for Win16. 使用说明 < 安装/卸载 > 执行 setup.exe 你可以将 IPMsg 安装到指定目录, 或者重新注册到启动组. 如果需要删除 IPMsg, 请先从控制面板中卸载, 再手动删除 IPMsg 目录. < 系统托盘区图标 > 左键双击图标, 即可打开
发送
消息窗口. 右键点击图标, 可进入 [服务设置], [离开] 等. <
发送
消息窗口 > -
发送
消息时, 若勾选了 [封装], 则接收者要先打开信封才能看到消息, 如果你还勾选了 [上锁], 则接收者在打开信封时还需要输入密码. (密码是由接收者自己在 [服务设置] 中设置的) - 若要
发送
文件/文件夹, 可直接将文件/文件夹拖入
发送
消息窗口 或在
发送
消息窗口上点击右键, 再选择
发送
文件或
发送
文件夹 - 传送文件/文件夹时, 当接收者还没有保存(下载)文件/文件夹时, 若
发送
者关闭或重启了 IPMsg, 则附带的文件信息将被清除, 接收者将不能继续接收(下载)到此文件. - 用户列表前缀符号说明 ":" 表示用户处于离开模式. "|" 表示用户使用的不是 2.0 以上版本的 IPMsg, 将不支持文件/文件夹的传送, 并且不支持通信数据加密. "|"(短线) 表示只支持文件/文件夹的传送. - 拖动列表表头标题项可改变其顺序, 并可点击右键选择"保存列表顺序" - 在消息输入窗口中, 可使用 Ctrl+Tab 输入制表符 Tab. - 在
发送
消息窗口上点击右键, 可以进入设置显示优先级, 选择工作组, 搜索用户(Ctrl+F), 传送文件, 传送文件夹, 保存列表顺序, 字体设置, 窗口大小设置, 固定窗口位置, 列表显示设置. - 在用户名上点击右键, 可设置其显示优先级 优先级按由小到大的顺序排序 - 通过设置显示优先级, 可将经常联系的用户至于列表顶端, 或者隐藏不需要联系的用户 < 接收消息窗口 > - 在接收消息窗口上点击右键, 可以进入字体设置, 窗口大小设置, 固定窗口位置. - 接收消息窗口标题栏中的 "+" 或 "-" 表示通信数据使用了加密算法 "+" 表示 RSA/1024 位, blowfish/128 位加密 "-" 表示 RSA/512 位, RC2/40 位加密 - 如果你收到的消息附带了文件, 将会显示出附件按钮. 点击按钮即可保存文件. < 其他 > - 如果需要(通过路由器)连接到广域网, 则需要设置
广播
地址. 详见广域网设置(
广播
设置) - 其它功能都很容易理解, 你试一试就明白了 操作技巧 1、隐藏/显示窗口Ctrl+D 2、按住Ctrl键再点[刷新]可保持现有用户,搜索新上线的用户 3、打开
发送
/接收消息窗口Ctrl+Alt+S/R(需要进行详细设置) 4、打开搜索窗口Ctrl+F 5、接收到多个文件,保存时可勾选[全部] 软件原理 局域网聊天软件飞鸽传书是目前比较流行的局域网即时通讯软件,由于历史悠久,它具有比较多的用户。 因为 FreeEIM 的实现原理和飞鸽传书差不多,希望广大用户了解其原理后,在使用时更加得心应手。 开发多年的飞鸽,在他的基础上增加了些许功能,例如语音对话,这里继续讨论FreeEIM(飞鸽传书),前几天,详细的了解了FreeEIM(飞鸽传书)的网络协议,详细分析并且实现了FreeEIM(飞鸽传书)的消息传递过程,这里就FreeEIM(飞鸽传书)中的文件和文件夹的传输做详细的说明。 在FreeEIM(飞鸽传书)中,如果要进行文件或者文件夹的传输,首先需要做的就是消息的应答,通过
UDP
发送
文件传输报文,另外的FreeEIM(飞鸽传书)客户端收到报文后,使用TCP协议
发送
应答报文,这样就开始进行文件的传输了。 这里开启两个线程,线程1负责文件的传送,线程2负责文件的接受,下边做一一说明。 首先,我们知道,可以
发送
多个文件,这些文件需要建立链表保存信息。 typedef struct file_info { struct file_info *next; //双向链表 struct file_info *forward; char *file; //文件名 int type; //文件类型:文件或者文件夹 int size; //文件大小 struct sockaddr_in addr; //目标网络信息 } FILE_INFO; [1]文件传送链表由专门的线程维护,这样,线程1就可以专心进行处理文件传输队列就可以了,线程1始终查询这个链表,如果表头为NULL,就说明没有要传输的文件,表头非空,就开始
发送
报文,获得正确的应答后,就可以开始文件的传输了,文件传输结束,将相应的链表节点删除。这里借鉴了很多程序中使用非常广泛的“命名池”相关的概念,只不过这里我们使用的是“文件池”,可以这么认为,如果有文件要传输,可以不用考虑是否有文件正在传输,只要把要传输的文件放入 “文件池”就可以了 , 同时,不用考虑“文件池”的大小,线程1是文件池的服务线程,它检测文件池的大小,如果非空,就会逐次传输文件。 这里需要特别注意的就是关于文件夹的传输,这个FreeEIM(飞鸽传书)一个难点,应为对与文件夹的内容是没有显示的,需要我们逐次的判断,在飞鸽传书中是这么处理的,如果是一个文件夹,就
发送
文件属性为IPMSG_FILE_DIR的信息
包
,FreeEIM(飞鸽传书)客户端收到这个信息
包
后,就创建这个文件夹,然后发起
发送
的FreeEIM(飞鸽传书)客户端,进入文件夹,传送文件夹内的文件,如果该文件夹下,还有文件夹,使用相同的方法,在文件夹内的文件传送结束后,就
发送
FREEEIM_FILE_RETPARENT信息
包
,接受的FREEEI_FILE_RETP报文的FreeEIM(飞鸽传书)客户端,执行返回上一级目录,FreeEIM(飞鸽传书)
发送
端,就需
发送
目录下的文件。这样循环操作,最终完成文件的传输,这个过程比较难以理解。 有了上边的知识,开发文件传输功能就变得简单多了,文件的接受也可以类推了,同样开启一个线程维护接受文件链表,逐次接受身下的文件,链表为空时。文件传输会遇到文件读写
问题
,有的文件
发送
是被打开了,这样会造成访问违规,所以要有相应的处理,才能让程序更加稳健。 程序启动时先读取用户配置文件,一般是"*.ini"格式,然后,使用Winsock的
广播
消息给整个局域网
发送
一个数据
包
,这时候,如果其他电脑已经运行了飞鸽传书,那么他收到这个
包
后,会将
包
的信息读取出来,当然,这个
包
里有用户的IP,用户名,性别等等。这样,在用户列表里就多了一个用户了。他的用户检查方式就如此简单而已。至于跨网段的实现,只需简单地修改一下
广播
地址就行了,如果不考虑速度,你可以给整个internet发
广播
消息。 消息
发送
,文件传输这些功能,都比较简单,如果你会网络编程,给你对方IP地址,这些功能实现起来再简单不过了。语音、视屏等,只需编写一些语音视频采集代码,传书的话,就像传文件一样。这里给段
广播
消息的实现代码吧: //
发送
广播
登陆消息 void EM_UserLogin::SendLogin_BC(LPEM_DATA msg) { SOCKET m_socket; m_socket = socket(AF_INET, SOCK_DGRAM, IPPROTO_IP); if (INVALID_SOCKET == m_socket) { MessageBox(0, "socket failed.", NULL, MB_OK); } SOCKADDR_IN sin;sin.sin_addr.s_addr = htonl(INADDR_BROADCAST); sin.sin_family = AF_INET; sin.sin_port = htons(BROADCAST_SEND_PORT);BOOL bOpt = TRUE; if (SOCKET_ERROR == setsockopt(m_socket, SOL_SOCKET, SO_BROADCAST, (char*)&bOpt, sizeof(bOpt))) { // Error occurred ::MessageBox(0,"BC setsockopt error.",0,0); return; } char *tmpBuf = msg->GetBuffer(); if (SOCKET_ERROR == sendto(m_socket, tmpBuf, msg->GetLength(), 0, (PSOCKADDR)&sin, sizeof(sin))) { // Error occurred ::MessageBox(0,"BC sendto error.",0,0); return; }closesocket(m_socket); 相关信息 - 所有的设置信息都保存在注册表的以下位置: \\HKEY_CURRENT_USER\Software\HSTools\ 用户密码以不可逆加密方式存储. ******************************************************************* * 如果你忘记了密码, 可以在注册表中将此键值删除 * * \\HKEY_CURRENT_USER\Software\HSTools\IPMsgEng\PasswordStr * ******************************************************************* - 本软件使用的默认端口为 2425 若仅使用
UDP
协议的端口, 将不能传送文件/文件夹 (如果安装了防火墙, 则必须打开相应的 TCP 和
UDP
端口) - 本软件为自由软件, 你可以随意传播, 但源码使用请参见许可协议. - 只有在启动或退出程序, 使用离开模式, 刷新在线用户时 IPMsg 才会进行消息
广播
. - 本软件由 Microsoft Visual C++ 6.0 编译 广域网设置(
广播
设置) - 主机号全部为 1 的 IP 地址, 即
广播
地址 例如, 连接到一个 C 类子网(即 24 位网络号, 8 位主机号), IP 地址为 aaa.bbb.ccc.ddd, 其
广播
地址即为: aaa.bbb.ccc.255 若对方处于另一个私有子网中,
广播
可能无效. - 更多
问题
, 请参阅相关资料或
咨询
你的网络管理员. - 若两台主机的连接经过了多个路由器, 请直接指定对方IP地址 - 拨号上网用户请勾选 [拨号连接] 当刷新在线用户列表时, 列表不会被清空 补充 - 启动飞鸽传书前, 你可以指定其运行时使用的端口, 且可以使用不同的端口打开多个窗口. 用法如下: ipmsg.exe 2426 (你可在快捷方式上设置) 但是你只能与同时也使用该端口的用户通信. - 所以你尽可选用你喜欢的端口运行本软件. 介于 10000 至 60000 可能更安全些. 你也可以
咨询
你的网络管理员. - 如果有多个网卡(IP), 你可以将飞鸽传书与指定的网卡(IP)进行绑定. 命令格式如下(你可以在快捷方式上设置): ipmsg.exe [端口] /NIC IP地址 例如: C:\>ipmsg.exe /NIC 192.168.10.100 - 支持命令方式
发送
消息 命令格式如下: ipmsg.exe [端口] /MSG [/LOG][/SEAL] <主机名或IP地址> <消息> 例如: C:\>ipmsg.exe /MSG /SEAL localhost Hello. 支持 - IPMsg 的技术讨论区是开放的. 如果你想订阅相关邮件, 请联系 ipmsg-subscribe@ring.gr.jp - 欢迎报告 bug, 以及提出建议 - 如果你有任何疑问, 请 E-mail 联系. shirouzu@h.email.ne.jp 中文版可联系阿志: hiwyz@163.net -
发送
错误报告, 请勿必记录以下信息: 软件版本, 操作系统, 故障描述, 以及故障重现方法等. 更新历史 ver 1.00 ... 日文版 (1996/08/19) ver 1.31 ... 英文版/日文版 (1997/09/01) ver 2.00 ... 英文版/日文版 (2002/11/19) 支持文件/文件夹传送 支持通信数据加密 ver 2.03 ... Bug 修正 (文件传送引起缓冲溢出)
广播
设置支持主机地址(FQDN)解析 ver 2.04 ... 增加绑定网卡(IP)功能 ver 2.05 ... Bug 修正 (2.04版当激活
发送
/接收消息窗口时,无法注销/关闭系统) ver 2.06 ... 很小的调整 ver 2007 ... 全面调整软件的界面可用性、性能稳定性 注意:本版本为 IPMSG 2.06版 编译环境: WINXP & VS2005, 可正确编译。
Java网络编程————
UDP
实现ThinkPad S5网络唤醒
功能要求:通过Java程序实现ThinkPad S5 笔记本网络唤醒 必备知识: 一、定义:网络唤醒,通过局域网、互联网或通讯网络,以有线网卡的形式,向目标电脑
发送
魔法
包
(Magic Packet),让电脑自动开机。该技术目前被大多数主板和网卡所支持。 二、远程唤醒必备条件: 远程唤醒只能依赖于主机硬件实现。 1.主板支持,能够在关机时为网卡供电,2002年以后的大部分主板都支持该功能。...
Java网络编程—
UDP
传输层协议:TCP/
UDP
TCP:安全的,面向连接的 UPD:不安全的,非面向连接的(比较高效)
UDP
传输协议:一种无连接的传输层协议,提供面向事务的简单不可靠信息传送服务 特点: 非面向连接,传输不可靠,可能丢失
发送
不管对方是否准备好,接收方收到也不确认 可以
广播
发送
非常简单的协议,开销小
UDP
操作字节数组(字节数组与
包
...
【Java学习】网络编程全总结——TCP、
Udp
、多线程、IO流、Socket、简易在线
咨询
聊天室、Java爬虫
目录网络编程1.1、概述1.2、网络通信的要素1.3、IP1.4、端口(port)1.5、通信协议1.6、TCP文件上传Tomcat1.7、
UDP
发送
消息构造方法摘要构造方法摘要
咨询
DatagramPacket.getData()与DatagramPacket.getLength()的误区trimstartsWith在线
咨询
:两个人都可以
发送
1.8、URLJava爬虫----爬取网易云音乐更多相关文章点这里 网络编程 1.1、概述 信件: 打电话:—连接—接了—通话 TCP 发短信:—
发送
了就完事了—接收
TCP与
UDP
的比较
两种不同的协议而已,
UDP
实现起来相对比TCP更加的简单. TCP-有连接,所以握手过程会消耗资源,过程为可靠连接,不会丢失数据,适合大数据量交换
UDP
-非可靠连接,会丢
包
,没有校验,速度快,无须握手过程 简单点讲
UDP
把需要
发送
的
包
往网络上一扔就不管它了,主要用于一些突发的小数据
包
,比如OICQ;而TCP还要实现差错控制、流量控制等,主要用于持续的数据流,比如HTTP、FTP等协议。
非技术区
7,765
社区成员
63,203
社区内容
发帖
与我相关
我的任务
非技术区
.NET技术 非技术区
复制链接
扫一扫
分享
社区描述
.NET技术 非技术区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章