C# 給TcpClient的Connect方法設置超時時間TimeOut
C# 給TcpClient的Connect方法設置超時時間TimeOut
資料來源: https://www.cnblogs.com/xyz0835/p/10179665.html
GITHUB: https://github.com/jash-git/CS_test_jint-project
01.Net 4.5之前Code:
var client = new TcpClient(); var result = client.BeginConnect( " remotehost " , this .Port, null , null ); var success = result.AsyncWaitHandle.WaitOne(TimeSpan.FromSeconds( 1 )); if (! success) { throw new Exception( " Failed to connect. " ); } // we have connected client.EndConnect(result);
02.Net 4.5之後Code:
var client = new TcpClient(); if (!client.ConnectAsync( " remotehost " , remotePort).Wait( 1000 )) { // connection failure }
03.自己實測(4.5可用):
TcpClient tcpSocket = new TcpClient(); tcpSocket.ReceiveBufferSize = 8192;//8k tcpSocket.SendBufferSize = 8192;//8k int intTcpRetryCount = 0; try { do { //tcpSocket.Connect("192.168.1.54", 9100); if (!tcpSocket.ConnectAsync("192.168.1.54", 9100).Wait(1000))//if (!tcpSocket.Connected) { tcpSocket = null; tcpSocket = new TcpClient(); intTcpRetryCount++; } else { break; } }while ((!tcpSocket.Connected) && (intTcpRetryCount<3)); if(tcpSocket.Connected) { if ((ESCPOSCommand != null) && (ESCPOSCommand.value != null)) { for (int i = 0; i < ESCPOSCommand.value.Count; i++) { byte[] bytes = Encoding.GetEncoding("big5").GetBytes(ESCPOSCommand.value[i]); NetworkStream tcpStream = tcpSocket.GetStream(); tcpStream.Write(bytes, 0, bytes.Length); tcpStream.Flush(); } } tcpSocket.GetStream().Close(); tcpSocket.Close(); } else { } } catch (Win32Exception ex) { }