Получение данных socket tcp / udp
Нужно получить пакет данных на публичный IP и вернуть сообщение.
Код ниже обрабатывает только локальные запросы 192.168.0.0:1100. При отправке данных на публичный IP (Например, через telnet) приложение ничего не видит.
Брандмауэр отключен полностью (общий, частный и профиль домена - отключено все).
using System;
using System.Text;
using System.Net;
using System.Net.Sockets;
namespace SocketTcpServer
{
class Program
{
static int port = 1100; // порт для приема входящих запросов
static void Main(string[] args)
{
IPEndPoint ipPoint = new IPEndPoint(IPAddress.Any, port);
Socket listenSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
try
{
listenSocket.Bind(ipPoint);
listenSocket.Listen(10);
Console.WriteLine("Сервер запущен. Ожидание подключений...");
while (true)
{
Socket handler = listenSocket.Accept();
StringBuilder builder = new StringBuilder();
int bytes = 0;
byte[] data = new byte[256];
do
{
bytes = handler.Receive(data);
builder.Append(Encoding.UTF8.GetString(data, 0, bytes));
}
while (handler.Available > 0);
Console.WriteLine(builder);
data = Encoding.ASCII.GetBytes("message");
handler.Send(data);
handler.Shutdown(SocketShutdown.Both);
handler.Close();
}
}
catch (Exception ex) {Console.WriteLine(ex.Message);}
}
}
}
UPD: Использую STUN для того, чтобы "пробить" порт
STUN = STUN_Client.Query(StunServer, StunServerPort, socket);
Console.WriteLine("Public address: {0}", STUN.PublicEndPoint);
Получаю публичный IP и порт автоматически, но пакеты все равно не доходят Для проверки использую linux команды: echo “hello” > /dev/udp/ip/port и ping