人気ブログランキング | 話題のタグを見る
(.Net)UDPの送受信テストツール
連続したUDPパケットが送信側と受信側でちゃんとやり取りされているかを確認したいと思ってツールを探してみたんですが、いいものが無かったのでちょっと.Net Framework で自作してみました。

とりあえず急ぎでパケットの送受信さえ確認できればいいというものなので、作りは非常に雑です。
しかし、こんなに簡単にネットワーク通信アプリが作れる .Net というフレームワークはやはり評価すべきだなと思いました。

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
 
namespace UDPtest
{
public partial class Form1 : Form
{
private int iCnt = 10000;
private bool flgStop = true;
 
public Form1()
{
InitializeComponent();
}
 
private void button1_Click(object sender, EventArgs e)
{
richTextBox1.Clear();
 
//文字コードを指定する
System.Text.Encoding enc = System.Text.Encoding.UTF8;
 
//データを送信するリモートホストとポート番号
string remoteHost = "192.168.0.100";
int remotePort = 55001;
//バインドするローカルポート番号
int localPort = 55000;
 
//ローカルポート番号localPortにバインドする
System.Net.Sockets.UdpClient udp =
new System.Net.Sockets.UdpClient(localPort);
 
int imtu = 10000;
 
for (int i = 0; i < iCnt; i++)
{
StringBuilder strMsg = new StringBuilder();
strMsg.Append(i.ToString("000000000"));
richTextBox1.AppendText(strMsg.ToString() + Environment.NewLine);
for (int j = 0; j < 1000; j++)
{
strMsg.Append("a");
}
 
byte[] sendBytes = enc.GetBytes(strMsg.ToString());
udp.Send(sendBytes, sendBytes.Length, remoteHost, remotePort);
//System.Threading.Thread.Sleep(1);
 
}
//UDP接続を終了
udp.Close();
Console.ReadLine();
}
 
private void button2_Click(object sender, EventArgs e)
{
richTextBox1.Clear();
//文字コードを指定する
System.Text.Encoding enc = System.Text.Encoding.UTF8;
 
//バインドするローカルポート番号
int localPort = 55001;
 
//ローカルポート番号localPortにバインドする
System.Net.Sockets.UdpClient udp =
new System.Net.Sockets.UdpClient(localPort);
 
for (int i = 0; i < iCnt - 1; i++)
{
//データを受信する
System.Net.IPEndPoint remoteEP = null;
byte[] rcvBytes = udp.Receive(ref remoteEP);
string rcvMsg = enc.GetString(rcvBytes);
rcvMsg = rcvMsg.Substring(0, 9);
 
System.IO.File.AppendAllText("res.txt", rcvMsg + Environment.NewLine);
}
udp.Close();
}
}
}

送信側で Thread.Sleep をしないと、結構な数のパケットが受信側に届きませんでした。
逆に Thread.Sleep(1) とすると、ほとんどのパケットが受信側に届きました。
どこでパケットロスしているのかがわかるといいんですが。。。。

参考:
dobon:UDPによりデータの送受信を行う
by jehoshaphat | 2010-09-20 20:20 | .Net開発


<< SunRay2で画面描画が遅く... SunRay2でWindows... >>