IPEndPoint groupEP1;
Socket Sock;
EndPoint r1;
EndPoint r2;
EndPoint r3;
const int listenPort = 1221; // Этот порт установлен в сетевых переменных ПЛК
byte[] bytes; // приемный массив
byte[] bytes2; // отсылаемый массив
bool plcConnected;

private void InitNetwork()
{
// Подготовка массивов для работы по сети
bytes = new byte[1 + 11];
bytes2 = new byte[1 + 8];
// Настройка сокета
groupEP1 = new IPEndPoint(IPAddress.Any, listenPort);
r1 = (EndPoint)groupEP1;
r2 = new IPEndPoint(IPAddress.Parse("192.168.1.101"), listenPort); r3 = new IPEndPoint(0, 0);
}

private void plcConnect()
{
Sock = new Socket(groupEP1.Address.AddressFamily, SocketType.Dgram, ProtocolType.Udp);
Sock.Bind(r1);
// Ожидание приема
timer1.Enabled = true;
btnListen.Enabled = false;
btnStopListen.Enabled = true;
plcConnected = true;
}

private void plcDisconnect()
{
// Отключение от сети
timer1.Enabled = false;
btnListen.Enabled = true;
btnStopListen.Enabled = false;
Sock.Shutdown(SocketShutdown.Both);
Sock.Close();
Sock.Dispose();
plcConnected = false;
}

private void btnListen_Click(object sender, EventArgs e)
{
plcConnect();
}

private void btnStopListen_Click(object sender, EventArgs e)
{
plcDisconnect();
}

private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
plcDisconnect();
}

private void timer1_Tick(object sender, EventArgs e)
{
if (Sock.Available > 0) // Есть ли поступившие данные
{
int temp = Sock.ReceiveFrom(bytes, ref r3); // Прием данных

string SSS = bytes[0].ToString("00: "); // Диагностический блок
for (int i = 1; i < temp; i++)
{
SSS = SSS + bytes[i].ToString("000 ");
}
textBox1.Text = textBox1.Text + SSS + "\r\n";

// System.Diagnostics.Debug.WriteLine(((IPEndPoint)r3 ).AddressFamily);
// System.Diagnostics.Debug.WriteLine(((IPEndPoint)r3 ).Address);
// System.Diagnostics.Debug.WriteLine(((IPEndPoint)r3 ).Port);

switch (bytes[0]) // Отработка разных посылок от ПЛК
{
}
}
}