C# TCPClient在读取操作期间SocketError 10051。适配器IP为空

问题描述 投票:0回答:1

我有一个应用程序,它使用TCPClient连接到TCPServer并每300ms交换数据。该应用程序和连接的工作与预期的一样。我测试了2天的连接,一直在运行,没有任何错误。今天,我得到了一个我无法解决的错误,我不明白。计算机(TCPClient)和TCPServer在同一个网络中,并且都是通过DHCP获得IP地址。应用程序从读取网络适配器信息开始,读取网络适配器的ip adress等信息。

NetworkInterface[] adapter = NetworkInterface.GetAllNetworkInterfaces();

在计算机上发现两个适配器,下面的代码提供了IP地址。

foreach (UnicastIPAddressInformation ip in adapter.GetIPProperties().UnicastAddresses)
{
   if (ip.Address.AddressFamily == System.Net.Sockets.AddressFamily.InterNetwork)
   {
      this.ip = ip.Address.ToString();
      this.mask = ip.IPv4Mask.ToString();
   }
}

适配器一: IP:192.168.0.153,掩码:255.255.255.0适配器二:IP:127.0.0.1,掩码:255.0.0.0(名回环伪接口1)。

我知道我的服务器的ip adress并开始连接。

controller = new TcpClient();
controller.Connect(192.168.0.0, 5001);
.... //Continues when controller.Connected == true
static NetworkStream ns_controller = controller.GetStream();
ns_controller.WriteTimeout = 100;
ns_controller.ReadTimeout = 10;

之后,我的应用程序确实对网络流数据进行了800秒的写入和读取。然后一个新的读取指令在捕获块中结束。

try
{
   byte[] r = new byte[100];
   int anz = 0;
   anz = ns_controller.Read(r, 0, r.Length);
}
catch (Exception ex)
{
   //Output of the inner exception data and reset of communication
}

InnerException.ErrorCode: 10051和InnerException.Message: 一个套接字操作引用了一个不可用的网络

当我因为错误而重新设置通信时,网络适配器在异常100ms后又被读取,代码和开始时一样。唯一不同的是ip地址和网络掩码现在是""空的。之后我关闭了我的应用程序并再次尝试。网络接口的ip adress又是192.168.0.153,没有变化。

我想问一下,以前有没有人遇到过这个问题,是什么原因造成的?我只发现了一些问题,就是在连接服务器的时候出现了错误代码10051。为什么控制器的ip地址在短时间内是空的,然后又变成和以前一样的值?

我知道我不能提供所有的信息,但我希望这已经足够了。问题是,所提供的信息是我在协议中记录的所有信息。我无法强制错误再次记录完整的信息。欢迎任何帮助或提示。

c# tcpclient networkstream
1个回答
0
投票

我已经面临着不完全相同的问题,但类似于此,我解决了它达到的根本原因。你可以尝试以下可能会帮助你,或者至少它可能会给你一些线索来解决你的问题。

通过使用ScoketExeption来增加一个捕捉区块 尽可 套接字错误

  try
    {
            //Your code .................
            Socket socket = controller.Client; // not necessary to use but could be helpful to gracefully close the socket and for retry connection in catch( ) e.g. if(socket!=null) socket.close();  
            // your code..................

        }
        catch(SocketException se)
        {
        string exception = string.Empty;
        switch (se.SocketErrorCode)
        {
            case SocketError.Success:
                exception = "Success";
                break;
            case SocketError.SocketError:
                exception = "Socket Error";
                break;
            case SocketError.Interrupted:
                exception = "Socket Interrupted";
                break;
            case SocketError.AccessDenied:
                exception = "Access Denied";
                break;
            case SocketError.Fault:
                exception = "Socket Falut";
                break;
            case SocketError.InvalidArgument:
                exception = "Invalid Argument";
                break;
            case SocketError.TooManyOpenSockets:
                exception = "Too Many Open Sockets";
                break;
            case SocketError.WouldBlock:
                exception = "Socket Blocked";
                break;
            case SocketError.InProgress:
                exception = "In progress";
                break;
            case SocketError.AlreadyInProgress:
                exception = "Already in progress";
                break;
            case SocketError.NotSocket:
                exception = "Not Socket";
                break;
            case SocketError.DestinationAddressRequired:
                exception = "Destination Address Required";
                break;
            case SocketError.MessageSize:
                exception = "Message Size Error";
                break;
            case SocketError.ProtocolType:
                exception = "Protocol Type Error";
                break;
            case SocketError.ProtocolOption:
                exception = "Protocol Option Error";
                break;
            case SocketError.ProtocolNotSupported:
                exception = "Protocol Not Supported";
                break;
            case SocketError.SocketNotSupported:
                exception = "Socket Not Supported";
                break;
            case SocketError.OperationNotSupported:
                exception = "Operation Not Supported";
                break;
            case SocketError.ProtocolFamilyNotSupported:
                exception = "Protocol Family Not Supported";
                break;
            case SocketError.AddressFamilyNotSupported:
                exception = "Address Family Not Supported";
                break;
            case SocketError.AddressAlreadyInUse:
                exception = "Adreess Already In Use";
                break;
            case SocketError.AddressNotAvailable:
                exception = "Address Not Avaialble";
                break;
            case SocketError.NetworkDown:
                exception = "Network Down";
                break;
            case SocketError.NetworkUnreachable:
                exception = "Network Unreachable";
                break;
            case SocketError.NetworkReset:
                exception = "Network Reset";
                break;
            case SocketError.ConnectionAborted:
                exception = "Connection Aborted";
                break;
            case SocketError.ConnectionReset:
                exception = "Connection Reset";
                break;
            case SocketError.NoBufferSpaceAvailable:
                exception = "No Buffer Space Available";
                break;
            case SocketError.IsConnected:
                exception = "Connected";
                break;
            case SocketError.NotConnected:
                exception = "Not Connected";
                break;
            case SocketError.Shutdown:
                exception = "Shutdown";
                break;
            case SocketError.TimedOut:
                exception = "Timed Out";
                break;
            case SocketError.ConnectionRefused:
                exception = "Connection Refused";
                break;
            case SocketError.HostDown:
                exception = "Host Down";
                break;
            case SocketError.HostUnreachable:
                exception = "Host Unreachable";
                break;
            case SocketError.ProcessLimit:
                exception = "Process Limit";
                break;
            case SocketError.SystemNotReady:
                exception = "System Not Ready";
                break;
            case SocketError.VersionNotSupported:
                exception = "Version Not Supported";
                break;
            case SocketError.NotInitialized:
                exception = "Not Initialized";
                break;
            case SocketError.Disconnecting:
                exception = "Disconnecting";
                break;
            case SocketError.TypeNotFound:
                exception = "Type Not Found";
                break;
            case SocketError.HostNotFound:
                exception = "Host Not Found";
                break;
            case SocketError.TryAgain:
                exception = "Try Again";
                break;
            case SocketError.NoRecovery:
                exception = "No Recovery";
                break;
            case SocketError.NoData:
                exception = "No Data";
                break;
            case SocketError.IOPending:
                exception = "IO Pending";
                break;
            case SocketError.OperationAborted:
                exception = "Operation Aborted";
                break;
            default:
                exception = "Un Specified Error";
                break;
        }
    }
© www.soinside.com 2019 - 2024. All rights reserved.