2015-01-28 2 views
1

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

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. This страница говорит, что это WSAENETDOWN: сеть вниз. Однако свойства ethernetJ11D указывают на то, что соединение завершено, и я могу ping устройство без проблем. Что я делаю не так?

EDIT

Когда я попытался запустить следующий клиент, я получил такое же исключение на вызов 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); 

EDIT 2

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

ответ

2

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

  1. Изменение IPAddress.Any на статический IP, например. IPAddress.Parse("192.168.0.8").
  2. Delay Bind, добавив Thread.Sleep(3000) прямо перед ним. Похоже, что настройка сетевых параметров интерфейса занимает некоторое время.