using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.Drawing;
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 UDPTest
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
UdpClient server = new UdpClient(8008);
IPEndPoint remoteIPEndPoint = new IPEndPoint(IPAddress.Any, 0);
List<IPEndPoint> endPoints = new List<IPEndPoint>();
bool add = true;
Thread serverThread = new Thread(delegate()
{
Thread serverReceive = new Thread(delegate()
{
while(true)
{
byte[] receivedBytes = server.Receive(ref remoteIPEndPoint);
string data = Encoding.UTF8.GetString(receivedBytes);
MessageBox.Show(data);
byte[] returned = Encoding.UTF8.GetBytes("Klient otrzymał potwierdzenie od serwera.");
if(endPoints.Count < 3)
{
for (int i = 0; i < endPoints.Count; i++ )
{
if (remoteIPEndPoint.Port == endPoints[i].Port)
add = false;
}
if(add == true)
endPoints.Add(remoteIPEndPoint);
}
for (int i = 0; i < endPoints.Count; i++)
server.Send(returned, returned.Length, endPoints[i]);
add = true;
}
});
serverReceive.IsBackground = true;
serverReceive.Start();
});
serverThread.IsBackground = true;
serverThread.Start();
}
UdpClient client;
UdpClient client2;
IPEndPoint remoteIPEndPoint = new IPEndPoint(IPAddress.Any, 0);
private void button2_Click(object sender, EventArgs e)
{
client = new UdpClient();
IPAddress address = IPAddress.Parse("127.0.0.1");
client.Connect(address, 8008);
Thread receiveClient = new Thread(delegate()
{
while(true)
{
byte[] rcvPacket = client.Receive(ref remoteIPEndPoint);
string rcvData = Encoding.UTF8.GetString(rcvPacket);
MessageBox.Show("Klient: " + rcvData);
}
});
receiveClient.IsBackground = true;
receiveClient.Start();
}
private void button3_Click(object sender, EventArgs e)
{
client2 = new UdpClient();
IPAddress address = IPAddress.Parse("127.0.0.1");
client2.Connect(address, 8008);
Thread receiveClient = new Thread(delegate()
{
while(true)
{
byte[] rcvPacket = client2.Receive(ref remoteIPEndPoint);
string rcvData = Encoding.UTF8.GetString(rcvPacket);
MessageBox.Show("Klient2: " + rcvData);
}
});
receiveClient.IsBackground = true;
receiveClient.Start();
}
private void button5_Click(object sender, EventArgs e)
{
sendMessage(client2, "Klient2 wysłał wiadomość.");
}
private void button4_Click(object sender, EventArgs e)
{
sendMessage(client, "Klient wysłał wiadomość.");
}
void sendMessage(UdpClient udp, string message)
{
byte[] sendBytes = Encoding.UTF8.GetBytes(message);
udp.Send(sendBytes, sendBytes.Length);
}
}
}