UDP发送数据测试
一个合作伙伴说UDP发送数据,A(IP:192.168.1.100 子网掩码255.255.255.0)网段能发数据到B网段,但B(IP:192.168.2.100 子网掩码255.255.255.0)网段不能发数据到A网段,说法是跨路由的情况下,数据只能从下层住上层发,而不能由上层住下层发。我觉得两个网段的地位应该是相等的,即使跨路由的情况下,也应该有路由映射可以让这两个网段相互可以ping通,而只要两个网段可以ping通,就可以用upd发送数据 (当然,我们说的前提都是在一个公司的局域网内),而发送数据应该没有什么上层网段和下层网段这个玄乎的概念了吧!(哎,网络不懂害死人呀!),于是,这个测试程序就产生了,目的就是看看在任意两个可以ping通的网段里是否可以收发数据。
源码如下:
namespace Clint2
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("请设置IP地址:");
string ip = Console.ReadLine();
UDPTest udpTest = new UDPTest(ip);
Console.WriteLine("请输入要发送的数据");
string key = Console.ReadLine();
while (key != "ok")
{
udpTest.AddQueue(key);
Console.WriteLine("请输入要发送的数据");
key = Console.ReadLine();
}
udpTest.StopSend();
}
}
public class UDPTest
{
Queue<string> _queue = new Queue<string>();
UdpClient clintReceive = new UdpClient(8801); //接收
UdpClient clintSend = new UdpClient(); //发送
IPEndPoint romoteIP;
bool _isStartSend;
Thread threadSend;
public UDPTest(string ip)
{
romoteIP = new IPEndPoint(IPAddress.Parse(ip), 8801);
//启动发送线程
_isStartSend = true;
threadSend = new Thread(new ThreadStart(Send));
threadSend.IsBackground = true;
threadSend.Start();
//开始接收数据
Receive();
}
public void StopSend()
{
_isStartSend = false;
clintReceive.Close();
clintSend.Close();
}
public void Receive()
{
clintReceive.BeginReceive(ReceiveCallback, clintReceive);
}
public void ReceiveCallback(IAsyncResult ar)
{
IPEndPoint tmpRomeIP = null;
UdpClient cr = ar.AsyncState as UdpClient;
byte[] receiveData = cr.EndReceive(ar, ref tmpRomeIP);
string str = Encoding.ASCII.GetString(receiveData);
Console.WriteLine(str + " from IP: " + tmpRomeIP.Address.ToString() +
" port: " + tmpRomeIP.Port.ToString()
);
Receive();
}
public void Send()
{
clintSend.Connect(romoteIP);
while (_isStartSend)
{
while (_queue.Count > 0 && _isStartSend)
{
string strValue = DeQueue();
byte[] sendData = Encoding.ASCII.GetBytes(strValue);
//clintSend.Send(sendData, sendData.Length, romoteIP);
clintSend.BeginSend(sendData, sendData.Length, SendCallback, clintSend);
}
Thread.Sleep(500);
}
}
public void SendCallback(IAsyncResult ar)
{
UdpClient cr = ar.AsyncState as UdpClient;
cr.EndSend(ar);
}
public void AddQueue(string str)
{
lock (this)
{
_queue.Enqueue(str);
}
}
public string DeQueue()
{
lock (this)
{
return _queue.Dequeue();
}
}
}
}
UDP发送数据测试的更多相关文章
- 通过 UDP 发送数据的简单范例
package j2se.core.net.udp; import java.io.IOException;import java.net.DatagramPacket;import java.net ...
- c/c++ 网络编程 UDP 发送端 bind 作用
网络编程 UDP 发送端 bind 作用 upd 发送端 调用bind函数的效果:把socket特定到一个指定的端口,如果不调用bind,内核会随机分配一个端口. upd 发送端 调用bind函数的目 ...
- Linux 下V4l2摄像头采集图片,实现yuyv转RGB,RGB转BMP,RGB伸缩,jpeglib 库实现压缩RGB到内存中,JPEG经UDP发送功(转)
./configure CC=arm-linux-gnueabihf-gcc LD=arm-linux-gnueabihf-ld --host=arm-linux --prefix=/usr/loca ...
- Java使用UDP发送数据到InfluxDB
最近在做压测引擎相关的开发,需要将聚合数据发送到InfluxDB保存以便实时分析和控制QPS. 下面介绍对InfluxDB的使用. 什么是InfluxDB InfluxDB是一款用Go语言编写的开源分 ...
- UDP发送的数据 以数据包形式发送
UDP发送的数据 以数据包形式发送
- 关于提高UDP发送效率的方法
UDP的发送效率和什么因素有关呢? 直观觉得,UDP的切包长越大,应该发送效率越高(最长为65536).可是依据实际測试和在网上查到的资料的结果,包长度为1024为发送效率最高. 这样的结果让人感到疑 ...
- C# UDP发送和接收
using System; using System.Collections.Generic; using System.Linq; using System.Net; using System.Ne ...
- Learn day8 re正则表达式\search函数\反射\tcp发送消息(循环)\udp发送消息
1.匹配单个字符 # ### 正则表达式 - 单个字符匹配 import re ''' findall 把匹配的结果直接返回到列表中 lst = re.findall("正则表达式" ...
- UDP发送和接收
发送函数 public bool udpSend(string ip, int port, byte[] data) { Socket socket = new Socket(AddressFamil ...
随机推荐
- JQuery 对 Select option 的操作
下拉框: <select id="selectID" > <option value="1">1</option& ...
- BZOJ4046 [Cerc2014] Pork barre
我们把边按权值从大到小依次加入图中 如果加到边权$V$,则当前的最小生成森林中边权$v\in[V, V']$(其中$V'$是任意值)形成的森林的边权和就是对于询问$[V, V']$的答案 由于点数不多 ...
- iframe自适应方法
ifram高度自适应,两种方法 方法一:父页面获取子页面高度,改变父页面高度以下代码加到父页面 <script language="javascript"> //获取i ...
- iOS开发UI篇—简单介绍静态单元格的使用
iOS开发UI篇—简单介绍静态单元格的使用 一.实现效果与说明 说明:观察上面的展示效果,可以发现整个界面是由一个tableview来展示的,上面的数据都是固定的,且几乎不会改变. 要完成上面的效果, ...
- Mutual Training for Wannafly Union #1解题报告
---恢复内容开始--- q神等人组织的vjudge上的多校训练,题目基本上都来自于CF,#1是上周进行的,参加后感觉收获很多,因为上周准备期中比较忙,解题报告现在补上. 比赛地址(兼题目地址) A题 ...
- Linux 编写c++程序之openssl
在使用openssl 库前,需检测是否安装openssl , shell 窗口输入:openssl version , 在openssl 安装完成之后, 可通过vi 编写测试代码 . 本例中附上加密 ...
- iOS8定位问题解决方案
原文 http://blog.csdn.net/nextstudio/article/details/40050095 1.修改info 新增Key: NSLocationAlwaysUsageDe ...
- 2014年3月份第4周51Aspx源码发布详情
足购库存管理系统源码 2014-3-24 [VS2010]功能介绍:这是为一个卖鞋子的朋友设计的,本来要用SQL数据库的,可是他说他不想安装,怕拖电脑速度,没办法,用了Access,在数据同步上和S ...
- echarts实现条形图表
导入相应的包需要的文件;
- OD调试篇6--对一些真正的小程序进行一点点的修改
先打开这个程序看看,提醒你这是一个未注册版本的软件.会发现只能添加4个联系人,这显然是我不想看见的,于是我要对这个程序进行一些修改,嘿嘿... 通过OD载入这个程序 有一些(SEH)也就是异常,我们可 ...