社区
C#
帖子详情
求教——如何使用Udpclient发送和接收广播信息
sunnyzhao
2003-05-10 06:57:58
我用UdpClient发送广播信息的时候,局域网没的任何机器都收不到(包括我自己),发给一个具体的主机也收不到。实在不明白是怎么回事,请高手指点。
...全文
497
3
打赏
收藏
求教——如何使用Udpclient发送和接收广播信息
我用UdpClient发送广播信息的时候,局域网没的任何机器都收不到(包括我自己),发给一个具体的主机也收不到。实在不明白是怎么回事,请高手指点。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
3 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
nehc
2003-05-17
打赏
举报
回复
using System;
using System.Net;
using System.Net.Sockets;
using System.Threading;
using System.Text;
public class Chat {
private static UdpClient m_Client;
private static int ListenerPort = 8080;
private static int SenderPort = 8080;
private static int LocalPort;
private static int RemotePort;
private static string m_szHostName;
private static IPAddress m_GroupAddress;
private static IPHostEntry m_LocalHost;
private static IPEndPoint m_RemoteEP;
private static bool m_Done = false;
public static void Usage() {
Console.WriteLine("UDP 多路广播聊天实用工具");
Console.WriteLine("\n用法::");
Console.WriteLine("chat.exe");
}
public static void Main( String [] args ) {
LocalPort = SenderPort;
RemotePort = ListenerPort;
if( args.Length > 0 ) {
//
// 输出帮助消息,因为此实用工具不采用任何参数
//
Usage();
return;
}
m_szHostName = Dns.GetHostName();
m_LocalHost = Dns.GetHostByName(m_szHostName);
Console.WriteLine("本地端口:{0},远程端口:{1}", LocalPort, RemotePort);
Console.WriteLine("正在初始化...");
Initialize();
Console.WriteLine("正在启动侦听器线程...");
Thread t = new Thread(new ThreadStart(Listener));
t.Start();
Byte [] buffer = null;
Encoding ASCII = Encoding.ASCII;
bool m_ShuttingDown = false;
while(!m_ShuttingDown) {
String s = Console.ReadLine();
if( s.Length == 0 )
continue;
if(String.Compare(s,0,"@",0,1) == 0) {
m_Done = true;
//
// 将结束符发送给我们自己,
// 以便接收线程可以关闭
//
s = m_szHostName + ":@";
m_ShuttingDown = true;
} else {
s = m_szHostName + ":" + s;
}
buffer = new Byte[s.Length + 1];
//
// 将数据发送给远程对方主机
//
int len = ASCII.GetBytes( s.ToCharArray(), 0, s.Length, buffer, 0);
int ecode = m_Client.Send(buffer, len, m_RemoteEP);
if(ecode <= 0) {
Console.WriteLine("发送时出错:" + ecode);
}
}
t.Abort();
t.Join();
Console.WriteLine("正在关闭连接...");
Terminate();
} // Main
public static void Terminate() {
m_Client.DropMulticastGroup(m_GroupAddress);
}
public static void Initialize() {
//
// 实例化 UdpCLient
//
m_Client = new UdpClient(LocalPort);
//
// 创建多路广播组对象
//
m_GroupAddress = IPAddress.Parse("224.0.0.1");
//
// 联接组
//
try {
m_Client.JoinMulticastGroup(m_GroupAddress, 100);
} catch(Exception) {
Console.WriteLine("无法联接多路广播组");
}
//
// 创建对方主机的终结点
//
m_RemoteEP = new IPEndPoint( m_GroupAddress, RemotePort );
}
public static void Listener() {
//
// 侦听器等待数据到来
// 并用缓冲区保存它。
Thread.Sleep(2000); // 确保 client2 正在接收
Encoding ASCII = Encoding.ASCII;
while(!m_Done) {
IPEndPoint endpoint = null;
Byte[] data = m_Client.Receive(ref endpoint);
String strData = ASCII.GetString(data);
if( strData.IndexOf(":@") > 0 ) {
//
// 我们接收到一个终止指示,
// 现在我们必须确定它是来
// 自我们的主线程的关闭,
// 还是来自其他地方
//
Char [] separators = {':'};
String [] vars = strData.Split(separators);
if( vars[0] == m_szHostName ) {
//
// 这是来自我们自己的线程,因此
// 立即结束
//
Console.WriteLine("正在关闭侦听器线程...");
//
// 此过程应已由主线程完成了,但为
// 安全起见,我们再执行一次
//
m_Done = true;
}
else {
//
// 这是来自其他地方的
//
Console.WriteLine("{0} 已离开对话", vars[0]);
}
}
else {
//
// 这是从其他地方以及我们自己
// 处接收到的正常数据
// 在输出前,查看它是否来自我
// 们自己
//
if(strData.IndexOf(":") > 0) {
Char [] separators = {':'};
String [] vars = strData.Split(separators);
if( vars[0] != m_szHostName ) {
Console.WriteLine(strData);
}
}
}
}
Console.WriteLine("侦听器线程已完成...");
return;
}
}
w_xiaohui
2003-05-10
打赏
举报
回复
using System;
using System.Net;
using System.Net.Sockets;
using System.Text;
public class UDPMulticastListener {
private static readonly IPAddress GroupAddress =
IPAddress.Parse("224.168.100.2");
private const int GroupPort = 11000;
private static void StartListener() {
bool done = false;
UdpClient listener = new UdpClient();
IPEndPoint groupEP = new IPEndPoint(GroupAddress,GroupPort);
try {
listener.JoinMulticastGroup(GroupAddress);
listener.Connect(groupEP);
while (!done) {
Console.WriteLine("Waiting for broadcast");
byte[] bytes = listener.Receive( ref groupEP);
Console.WriteLine("Received broadcast from {0} :\n {1}\n",
groupEP.ToString(),
Encoding.ASCII.GetString(bytes,0,bytes.Length));
}
listener.Close();
} catch (Exception e) {
Console.WriteLine(e.ToString());
}
}
public static int Main(String[] args) {
StartListener();
return 0;
}
}
using System;
using System.Net;
using System.Net.Sockets;
using System.Text;
public class UDPMulticastSender {
private static IPAddress GroupAddress =
IPAddress.Parse("224.168.100.2");
private static int GroupPort = 11000;
private static void Send( String message) {
UdpClient sender = new UdpClient();
IPEndPoint groupEP = new IPEndPoint(GroupAddress,GroupPort);
try {
Console.WriteLine("Sending datagram : {0}", message);
byte[] bytes = Encoding.ASCII.GetBytes(message);
sender.Send(bytes, bytes.Length, groupEP);
sender.Close();
} catch (Exception e) {
Console.WriteLine(e.ToString());
}
}
public static int Main(String[] args) {
Send(args[0]);
return 0;
}
}
wanghui00
2003-05-10
打赏
举报
回复
你发你的源代码啊,
你用tcpclient试试啊,那个不稳定啊
计算机网络 传输层 TCP和
UDP
协议
Re: 计算机网络 传输层 TCP和
UDP
协议# 传输层协议 TCP 和
UDP
的应用场景 要
发送
的内容多,需要将
发送
的内容分成多个数据包
发送
(TCP) 要
发送
的内容少,一个数据包就能
发送
全部内容(
UDP
)# 传输层协议和应用层协议之间的关系 传输层协议加一个端口号来标识一个应用层协议, 展示了传输层协议和应用层协议之间的关系#
使用
TCP/IP筛选实现网络安全 防火墙设置与端口#
UDP
协议特点和报文格式
UDP
是无连接的:即
发送
数据之前不需要建立连接
UDP
使用
尽最大努力交付:即不保证可靠交付,因此主机不需要维持复杂的连接状态表# TCP 协议特点和报文格式先连接后释放;点对点;可靠传输;全双工通信;面向数据流七项标记位停止等待协议与改进的停止等待协议滑动窗口技术详解:确认Seq与选择确认SACK 超时重传时间:查询计算与自动调整 流量控制功能:点对点的流量控制 拥塞控制:相对整体网络环境而言;慢开始算法和拥塞避免算法 改进的拥塞控制:快重传和快恢复 三次握手建立TCP连接,四次挥手释放连接。# TCP 协议面临的攻击 SYN 攻击:捏造的源地址; LAND攻击:自己就是源地址# 通过抓包工具,查看以上报文格式# 习题详解
2021 Java面试真题集锦
目录 … 1 大厂面试的基本流程 17 字节跳动 17 阿里 17 腾讯 18 网易游戏 18 面试前需要准备: 18 面试中可以借鉴的套路 19 用简历争取到更多的面试机会 19 自我介绍时,立即全面抛出技术栈和亮点 20 先介绍项目背景,打消面试官疑问 21 通过说项目管理工具,说明你不仅会写代码 22 用 SPRING BOOT 项目举例,说明你的技术基本面 23 用实例说明你在内存调优方面的经验 24 展示你在数据库调优方面的经验 25 总结前文说辞 26 准备项目说辞时,更可以准备后继面试官的问
35 张图解:被问千百遍的 TCP 三次握手和四次挥手面试题
前言 不管面试 Java 、C/C++、Python 等开发岗位,TCP的知识点可以说是必问的了。 任 TCP 虐我千百遍,我仍待 TCP 如初恋。 遥想小林当年校招时常因TCP面试题被刷,真是又爱又恨…. 过去不会没关系,今天就让我们来消除这份恐惧,微笑着勇敢的面对它吧! 所以小林整理了关于TCP 三次握手和四次挥手的面试题型,跟大家一起探讨探讨。 TCP 基本认识 TCP ...
【转】WebSocket详解(一):初步认识WebSocket技术
1、前言 HTML5规范在传统的web交互基础上为我们带来了众多的新特性,随着web技术被广泛用于web APP的开发,这些新特性得以推广和
使用
,而websocket作为一种新的web通信技术具有巨大意义。 本文将带您认识WebSocket。也可查看本文的下篇:《WebSocket详解(二):技术原理、代码演示和应用案例》。 2、系列文章 本文是系列文章中的第1篇,本系列文章的大纲如下: 《WebSocket详解(一):初步认识WebSocket技术...
网络编程之setsockopt
http://blog.csdn.net/hurtmanzc/archive/2006/05/30/763952.aspx1. 如果在已经处于 ESTABLISHED状态下的socket(一般由端口号和标志符区分)调用closesocket(一般不会立即关闭而经历TIME_WAIT的过程)后想继续重用该socket:BOOL bReuseaddr=TRUE;setsockopt(s,SOL_SOC
C#
110,536
社区成员
642,578
社区内容
发帖
与我相关
我的任务
C#
.NET技术 C#
复制链接
扫一扫
分享
社区描述
.NET技术 C#
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
让您成为最强悍的C#开发者
试试用AI创作助手写篇文章吧
+ 用AI写文章