WSAENETDOWN SocketException в комплекте FEZ Spider

Я пытаюсь написать TCP-сервер в .NETMF 4.3 для своего комплекта FEZ Spider.

public partial class Program
{
    void ProgramStarted()
    {
        ethernetJ11D.NetworkInterface.Open();
        ethernetJ11D.UseStaticIP("192.168.0.8", "255.255.255.0", "192.168.0.1");
        Socket serverSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
        EndPoint endPoint = new IPEndPoint(IPAddress.Any, 7777);
        serverSocket.Bind(endPoint);
        serverSocket.Listen(10);

        new Thread(() =>
        {
            while (true)
            {
                Debug.Print("Network up: " + ethernetJ11D.IsNetworkUp);//true
                Debug.Print("Network connected: " + ethernetJ11D.IsNetworkConnected);//true
                System.Net.Sockets.Socket clientSocket = serverSocket.Accept();//exception!
                new Thread(new Request(clientSocket).Process);
            }
        }).Start();
    }

Метод serverSocket.Accept создает исключение SocketException с кодом ошибки 10050. На этой странице написано WSAENETDOWN: сеть не работает. Однако в свойствах ethernetJ11D указано, что соединение установлено, и я могу без проблем пропинговать устройство. Что я делаю не так?

ИЗМЕНИТЬ

Когда я попытался запустить следующий клиент, я получил такое же исключение при вызове socket.Connect.

ethernetJ11D.NetworkInterface.Open();
ethernetJ11D.UseStaticIP("192.168.0.8", "255.255.255.0", "192.168.0.1");
Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
IPEndPoint endpoint = new IPEndPoint(IPAddress.Parse("192.168.0.5"), 7777);
socket.Connect(endpoint);

Debug.Print("connected");
byte[] msg = new byte[] { 7, 77, 222 };
socket.Send(msg);

ИЗМЕНИТЬ 2

Вместо этого я попытался реализовать клиент UDP. Это тоже не работает.


person tearvisus    schedule 28.01.2015    source источник


Ответы (1)


Я решил проблему:

  1. Измените IPAddress.Any на статический IP-адрес, например. IPAddress.Parse("192.168.0.8").
  2. Отложите привязку, добавив Thread.Sleep(3000) прямо перед ней. Похоже, настройка сетевых параметров интерфейса занимает некоторое время.
person tearvisus    schedule 29.01.2015