using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Diagnostics;using System.Drawing;using System.IO;using System.Linq;using System.Net;using System.Net.Sockets;using System.Text;using System.Threading;using System.Threading.Tasks;using System.Windows.Forms; namespace NetworkThrouputTool{ public partial class Main : Form { private TcpListener m_server; private TcpClient client; private int packetSize; private System.Threading.Timer timer; private delegate void SafeCallDelegate(Result result); public Main() { InitializeComponent(); } private void button4_Click(object sender, EventArgs e) { startSending(); } private void SendData(object state) { try { Random rand = new Random(); byte[] data = new byte[packetSize]; rand.NextBytes(data); Buffer.BlockCopy(BitConverter.GetBytes(packetSize), 0, data, 0, 4); Stopwatch stopWatch = new Stopwatch(); stopWatch.Reset(); stopWatch.Start(); NetworkStream stream = client.GetStream(); stream.Write(data, 0, data.Length); stopWatch.Stop(); Result result = new Result() { Size = packetSize, Type = "Sent", Time = stopWatch.ElapsedTicks / 10000.0D, Speed = Convert.ToDouble(packetSize) / (stopWatch.ElapsedTicks / 10000.0D) }; var d = new SafeCallDelegate(AppendRow); this.listView1.Invoke(d, result); } catch (Exception ex) { MessageBox.Show($"Can not send package to Server. Message: {ex.Message}", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); } } private void button1_Click(object sender, EventArgs e) { try { IPAddress localAddr = IPAddress.Any; int port = Convert.ToInt32(textBoxServerPort.Text); m_server = new TcpListener(localAddr, port); m_server.Start(); button1.Enabled = false; button2.Enabled = true; m_server.BeginAcceptTcpClient(new AsyncCallback(AccepConnection), m_server); } catch (Exception ex) { MessageBox.Show($"Can not start Server. Message: {ex.Message}", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); } } private void button2_Click(object sender, EventArgs e) { m_server.Stop(); button1.Enabled = true; button2.Enabled = false; } // Process the client connection. public void AccepConnection(IAsyncResult ar) { try { // Get the listener that handles the client request. TcpListener listener = (TcpListener)ar.AsyncState; // End the operation and display the received data on // the console. TcpClient client = listener.EndAcceptTcpClient(ar); NetworkStream stream = client.GetStream(); Stopwatch stopWatch = new Stopwatch(); stopWatch.Reset(); Byte[] hbuffer = new Byte[4]; // 4 Byte buffer for size Byte[] buffer = new Byte[1024]; // 8 Byte buffer for size while (client.Connected) { int actualReadBytes = stream.Read(hbuffer, 0, hbuffer.Length); int size = BitConverter.ToInt32(hbuffer, 0); stopWatch.Start(); while (actualReadBytes < size) { actualReadBytes = actualReadBytes + stream.Read(buffer, 0, Math.Min(buffer.Length,size - actualReadBytes)); } stopWatch.Stop(); var d = new SafeCallDelegate(AppendRow); m_server.BeginAcceptTcpClient(new AsyncCallback(AccepConnection), m_server); Result result = new Result() { Size = size, Type = "Recieved", Time = stopWatch.ElapsedTicks / 10000.0D, Speed = size / (stopWatch.ElapsedTicks / 10000.0D) }; this.listView1.Invoke(d, result); stopWatch.Reset(); } } catch { } } private void AppendRow(Result result) { ListViewItem it = new ListViewItem(result.Type); it.SubItems.Add(result.Size.ToString()); it.SubItems.Add(result.Time.ToString()); it.SubItems.Add(result.Speed.ToString()); this.listView1.Items.Add(it); } private class Result { public int Size; public string Type; public double Time; public double Speed; } private void button3_Click(object sender, EventArgs e) { this.listView1.Clear(); } private void export2File() { string filename = ""; SaveFileDialog sfd = new SaveFileDialog(); sfd.Title = "Export Results"; sfd.Filter = "Text File (.csv) | *.csv"; if (sfd.ShowDialog() == DialogResult.OK) { filename = sfd.FileName.ToString(); if (filename != "") { using (StreamWriter sw = new StreamWriter(filename)) { sw.WriteLine("{0},{1},{2},{3}", "Type", "Size (B)","Time (ms)","Speed (KB/s)"); foreach (ListViewItem item in this.listView1.Items) { sw.WriteLine("{0},{1},{2},{3}", item.SubItems[0].Text, item.SubItems[1].Text, item.SubItems[2].Text, item.SubItems[3].Text); } } } } } private void button5_Click(object sender, EventArgs e) { export2File(); } private void button6_Click(object sender, EventArgs e) { stopSending(); } private void stopSending() { try { timer.Change(Timeout.Infinite, Timeout.Infinite); NetworkStream stream = client.GetStream(); stream.Close(); client.Close(); } finally { button4.Enabled = true; button6.Enabled = false; textBoxPacketSize.Enabled = true; textBoxClientHost.Enabled = true; textBoxClientPort.Enabled = true; } } private void startSending() { try { Random rand = new Random(); packetSize = Convert.ToInt32(textBoxPacketSize.Text); if (packetSize < 8) { MessageBox.Show("Please specify a packetsize > 8B", "Invalid PacketSize", MessageBoxButtons.OK, MessageBoxIcon.Warning); return; } int port = Convert.ToInt32(textBoxClientPort.Text); string host = textBoxClientHost.Text; client = new TcpClient(host, port); timer = new System.Threading.Timer(SendData, null, TimeSpan.FromSeconds(1), TimeSpan.FromSeconds(1)); button6.Enabled = true; button4.Enabled = false; textBoxPacketSize.Enabled = false; textBoxClientHost.Enabled = false; textBoxClientPort.Enabled = false; } catch (Exception ex) { MessageBox.Show($"Can not connect to Server. Message: {ex.Message}", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); } } } }
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace NetworkThrouputTool
{
public partial class Main : Form
{
private TcpListener m_server;
private TcpClient client;
private int packetSize;
private System.Threading.Timer timer;
private delegate void SafeCallDelegate(Result result);
public Main()
{
InitializeComponent();
}
private void button4_Click(object sender, EventArgs e)
{
startSending();
}
private void SendData(object state)
{
try
{
Random rand = new Random();
byte[] data = new byte[packetSize];
rand.NextBytes(data);
Buffer.BlockCopy(BitConverter.GetBytes(packetSize), 0, data, 0, 4);
Stopwatch stopWatch = new Stopwatch();
stopWatch.Reset();
stopWatch.Start();
NetworkStream stream = client.GetStream();
stream.Write(data, 0, data.Length);
stopWatch.Stop();
Result result = new Result()
{
Size = packetSize,
Type = "Sent",
Time = stopWatch.ElapsedTicks / 10000.0D,
Speed = Convert.ToDouble(packetSize) / (stopWatch.ElapsedTicks / 10000.0D)
};
var d = new SafeCallDelegate(AppendRow);
this.listView1.Invoke(d, result);
}
catch (Exception ex)
{
MessageBox.Show($"Can not send package to Server. Message: {ex.Message}", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
private void button1_Click(object sender, EventArgs e)
{
try
{
IPAddress localAddr = IPAddress.Any;
int port = Convert.ToInt32(textBoxServerPort.Text);
m_server = new TcpListener(localAddr, port);
m_server.Start();
button1.Enabled = false;
button2.Enabled = true;
m_server.BeginAcceptTcpClient(new AsyncCallback(AccepConnection), m_server);
}
catch (Exception ex)
{
MessageBox.Show($"Can not start Server. Message: {ex.Message}", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
private void button2_Click(object sender, EventArgs e)
{
m_server.Stop();
button1.Enabled = true;
button2.Enabled = false;
}
// Process the client connection.
public void AccepConnection(IAsyncResult ar)
{
try
{
// Get the listener that handles the client request.
TcpListener listener = (TcpListener)ar.AsyncState;
// End the operation and display the received data on
// the console.
TcpClient client = listener.EndAcceptTcpClient(ar);
NetworkStream stream = client.GetStream();
Stopwatch stopWatch = new Stopwatch();
stopWatch.Reset();
Byte[] hbuffer = new Byte[4]; // 4 Byte buffer for size
Byte[] buffer = new Byte[1024]; // 8 Byte buffer for size
while (client.Connected)
{
int actualReadBytes = stream.Read(hbuffer, 0, hbuffer.Length);
int size = BitConverter.ToInt32(hbuffer, 0);
stopWatch.Start();
while (actualReadBytes < size)
{
actualReadBytes = actualReadBytes + stream.Read(buffer, 0, Math.Min(buffer.Length,size - actualReadBytes));
}
stopWatch.Stop();
var d = new SafeCallDelegate(AppendRow);
m_server.BeginAcceptTcpClient(new AsyncCallback(AccepConnection), m_server);
Result result = new Result()
{
Size = size,
Type = "Recieved",
Time = stopWatch.ElapsedTicks / 10000.0D,
Speed = size / (stopWatch.ElapsedTicks / 10000.0D)
};
this.listView1.Invoke(d, result);
stopWatch.Reset();
}
}
catch
{
}
}
private void AppendRow(Result result)
{
ListViewItem it = new ListViewItem(result.Type);
it.SubItems.Add(result.Size.ToString());
it.SubItems.Add(result.Time.ToString());
it.SubItems.Add(result.Speed.ToString());
this.listView1.Items.Add(it);
}
private class Result
{
public int Size;
public string Type;
public double Time;
public double Speed;
}
private void button3_Click(object sender, EventArgs e)
{
this.listView1.Clear();
}
private void export2File()
{
string filename = "";
SaveFileDialog sfd = new SaveFileDialog();
sfd.Title = "Export Results";
sfd.Filter = "Text File (.csv) | *.csv";
if (sfd.ShowDialog() == DialogResult.OK)
{
filename = sfd.FileName.ToString();
if (filename != "")
{
using (StreamWriter sw = new StreamWriter(filename))
{
sw.WriteLine("{0},{1},{2},{3}", "Type", "Size (B)","Time (ms)","Speed (KB/s)");
foreach (ListViewItem item in this.listView1.Items)
{
sw.WriteLine("{0},{1},{2},{3}", item.SubItems[0].Text, item.SubItems[1].Text, item.SubItems[2].Text, item.SubItems[3].Text);
}
}
}
}
}
private void button5_Click(object sender, EventArgs e)
{
export2File();
}
private void button6_Click(object sender, EventArgs e)
{
stopSending();
}
private void stopSending()
{
try
{
timer.Change(Timeout.Infinite, Timeout.Infinite);
NetworkStream stream = client.GetStream();
stream.Close();
client.Close();
}
finally
{
button4.Enabled = true;
button6.Enabled = false;
textBoxPacketSize.Enabled = true;
textBoxClientHost.Enabled = true;
textBoxClientPort.Enabled = true;
}
}
private void startSending()
{
try
{
Random rand = new Random();
packetSize = Convert.ToInt32(textBoxPacketSize.Text);
if (packetSize < 8)
{
MessageBox.Show("Please specify a packetsize > 8B", "Invalid PacketSize", MessageBoxButtons.OK, MessageBoxIcon.Warning);
return;
}
int port = Convert.ToInt32(textBoxClientPort.Text);
string host = textBoxClientHost.Text;
client = new TcpClient(host, port);
timer = new System.Threading.Timer(SendData, null, TimeSpan.FromSeconds(1), TimeSpan.FromSeconds(1));
button6.Enabled = true;
button4.Enabled = false;
textBoxPacketSize.Enabled = false;
textBoxClientHost.Enabled = false;
textBoxClientPort.Enabled = false;
}
catch (Exception ex)
{
MessageBox.Show($"Can not connect to Server. Message: {ex.Message}", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
}
}