我有一个应用程序,它使用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地址在短时间内是空的,然后又变成和以前一样的值?
我知道我不能提供所有的信息,但我希望这已经足够了。问题是,所提供的信息是我在协议中记录的所有信息。我无法强制错误再次记录完整的信息。欢迎任何帮助或提示。
我已经面临着不完全相同的问题,但类似于此,我解决了它达到的根本原因。你可以尝试以下可能会帮助你,或者至少它可能会给你一些线索来解决你的问题。
通过使用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;
}
}