socket读取超时报错
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了socket读取超时报错相关的知识,希望对你有一定的参考价值。
参考技术A 【案例1】一次因为传输管道中的数据量过大导致的socket读取超时报错现象: tjmob_37wan_1 游戏服在21:00:22去 tjmob_match_36 match服同步请求跨服远征的结果;然后 tjmob_match_36 match服上产生的响应数据过大,导致以下读取超时报错,最终导致本次跨服远征的结果出错。
解决:由于match服同步跨服远征的结果的响应数据有无效的大数据导致的,所以注释掉这部分无效的响应数据即可。
socket
的默认超时设置是20000毫秒,即2秒钟
读取ftp文件最后一行以后报错,无法访问已释放的对象。 对象名:System.Net.Sockets.NetworkStream
using (StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.GetEncoding(936)))
#region 读取FTP服务器csv文件数据
string strLine = "";
//记录每行记录中的各字段内容
string[] aryLine = null;
string[] tableHead = null;
//标示列数
int columnCount = 0;
//标示是否是读取的第一行
bool IsFirst = true;
//逐行读取CSV中的数据
#region 循环遍历数据
//string strfs = reader.ReadToEnd();
while ((strLine = reader.ReadLine()) != null) //这里报错 读取到最后一的时候
//取第一行 为表头
if (IsFirst == true)
tableHead = strLine.Split(',');
IsFirst = false;
columnCount = tableHead.Length;
//创建列
for (int i = 0; i < columnCount; i++)
DataColumn dc = new DataColumn(tableHead[i]);
dt.Columns.Add(dc);
else
aryLine = strLine.Split(',');
DataRow dr = dt.NewRow();
// 添加次行
for (int j = 0; j < columnCount; j++)
dr[j] = aryLine[j];
dt.Rows.Add(dr);
#endregion
if (aryLine != null && aryLine.Length > 0)
dt.DefaultView.Sort = tableHead[0] + " " + "asc";
#endregion
response.Close();
comm.WriteModuleLog(string.Format("读取数据成功!"), "日志");
return dt;
catch (Exception ex)
comm.WriteModuleLog("读取数据出错!" + ex.Message, "日志");
return null;
会这样是因为当读取流读取到最后一行内容后就关闭了文件了
虽然在正常的读取流中会在读取完内容后返回null
但再ftp文件的读取中,读取完最后一行后再读取就会抛出这个异常
其实用您代码注释的这句//string strfs = reader.ReadToEnd();来读取就可以了
如果要分行处理直接用分行符分割一下就可以了 参考技术A 不要对同一个流get两次。。
如果需要读取两次的话 先读取到memoryStream中再做第二次处理。。追问
get两次? 哪里get两次了?
以上是关于socket读取超时报错的主要内容,如果未能解决你的问题,请参考以下文章
C语言socket服务端报错:bind socket error: Address already in use(errno: 98)(setsockopt()各使用场景)
C语言socket服务端报错:bind socket error: Address already in use(errno: 98)(setsockopt()各使用场景)