Исключение сокета, возникающее при получении данныхC#

Место общения программистов C#
Anonymous
Исключение сокета, возникающее при получении данных

Сообщение Anonymous »

Я работаю над приложением C#, читаю из сокета, и в какой-то момент возникает исключение:
Unable to read data from the transport connection: A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond.

Если я остановлю приложение и перезапущу его, если все снова заработает, пока это не произойдет снова, это очень повторяется. Что я не сделал и что мне нужно сделать?
Функция, в которой выдается это исключение:
private int intReadStream(DateTime dtStart
, int intStreamSize
, double dblTimeout
, bool blnBinary
, string strPrerequisiteID
, out string strRX
, out string strUnmodified
, out bool blnTimeout) {
byte[] arybytPacket = new byte[intStreamSize];
int intRead = 0, intTotalReceived = 0;
strRX = strUnmodified = string.Empty;
blnTimeout = false;
try {
do {
if (mNetStream.CanRead != true) {
break;
}
intRead = mNetStream.Read(arybytPacket, intTotalReceived, intStreamSize);
intTotalReceived += intRead;
if ((intTotalReceived + intStreamSize) > intStreamSize) {
break;
}
TimeSpan tsElapsed = DateTime.Now - dtStart;
if (tsElapsed.TotalMilliseconds >= dblTimeout) {
blnTimeout = true;
}
} while (mNetStream.DataAvailable && blnTimeout != true);
} catch (Exception ex) {
//NOTE: The error is not reported, this is by design
string strUsed = ex.Message;
TimeSpan tsElapsed = DateTime.Now - dtStart;
if (tsElapsed.TotalMilliseconds >= dblTimeout) {
blnTimeout = true;
}
} finally {
if (blnTimeout != true) {
if (intRead > 0) {
UpdateRx();
if (intTotalReceived == 0) {
intTotalReceived = intRead;
}
}
strUnmodified = System.Text.Encoding.ASCII.GetString(arybytPacket, 0, arybytPacket.Length);
if (strUnmodified != null && strUnmodified.Length > 0) {
if (strUnmodified.Contains(mcstrClose) == true
|| strUnmodified.Contains(mcstrOK) == true
|| strUnmodified.Contains(mcstrReady) == true
|| strUnmodified.Contains(mcstrRemoteConnv) == true) {
intTotalReceived = intReadStream(dtStart, intStreamSize, dblTimeout
, blnBinary, strPrerequisiteID
, out strRX, out strUnmodified, out blnTimeout);
}
}
}
}
if (strUnmodified.Length > 0) {
intTotalReceived = strUnmodified.IndexOf("\0");
if (intTotalReceived > 0) {
string strASCIIEnd = CSTR.SquareBracketClose + CSTR.CRLF
, strASCIIStart = CSTR.SquareBracketOpen;
if (intTotalReceived > 0) {
//Added received bytes to received counter
muintReceived += (uint)intRead;
}
if (strPrerequisiteID.Length > 0) {
if (this.mdicMsgs.ContainsKey(strPrerequisiteID) != true) {
//Cannot continue because there is no message matching the prerequisite
return 0;
}
clsQuintexMsg prerequisitic = this.mdicMsgs[strPrerequisiteID];
if (prerequisitic == null) {
return 0;
}
//Is the prerequistite response binary?
blnBinary = prerequisitic.blnBinaryResponse;
}
if (blnBinary != true) {
if (strUnmodified.StartsWith(strASCIIStart) == true) {
strRX = strUnmodified.Substring(strASCIIStart.Length);
}
int intFound = strRX.IndexOf(strASCIIEnd);
if (intFound != -1) {
strRX = strRX.Substring(0, intFound);
}
}
if (blnBinary != true) {
return strRX.Length;
}
strRX = string.Empty;
foreach (byte bytItem in arybytPacket) {
string strByte = bytItem.ToString();
strRX += bytItem.ToString("X2");
}
intTotalReceived = strRX.Length;
}
}
return intTotalReceived;
}


Подробнее здесь: https://stackoverflow.com/questions/790 ... pt-of-data

Вернуться в «C#»