读书人

TcpClient发送文件有关问题

发布时间: 2013-03-14 10:33:15 作者: rapoo

TcpClient发送文件问题
本帖最后由 pwm812 于 2013-01-09 09:49:30 编辑 现在有一个问题,就是发送文件的时候,一般小文件(150KB以下的没问题),但是超过这个大小的时候就会卡在150KB左右,不管你文件多大,都会卡在这里,不知道怎么回事,我在想是不是服务器没有接收而堵塞了,但是也没有报错,纠结了很久,求大虾们帮助!!



发送方法
public void SendFile(IPEndPoint ipRemote, string sFilePath)
{
int iReadLen;
byte[] fileData;
NetworkStream nStream;
//try
//{
tClient = new TcpClient(ipRemote.Address.ToString(), ipRemote.Port);
tClient.SendBufferSize = Settings.iMaxBufferSize;
FileStream fStream = new FileStream(sFilePath, FileMode.Open);
nStream = tClient.GetStream();
do
{
fileData = new byte[Settings.iMaxBufferSize];
iReadLen = fStream.Read(fileData, 0, fileData.Length);
SendNow(fileData,iReadLen);
//nStream.Write(fileData, 0, iReadLen);
if (SendPartCompleted != null)
SendPartCompleted(iReadLen);

} while (iReadLen > 0);
nStream.Flush();
fStream.Close();
nStream.Close();
if (SendAllCompleted != null)
SendAllCompleted();
//}
//catch (Exception e)
//{
//}
}

void SendNow(byte[] data, int iReadLen)


{
int iSurplusLen = data.Length;
while (iSurplusLen > 0)
{
if (tClient.Client.Poll(5000, SelectMode.SelectWrite))
{
int iSendLen = tClient.Client.Send(data, 0, iReadLen, SocketFlags.None);
iSurplusLen -= iSendLen;
}
}
}




接收方法

public void RecFile(string sFilePath)
{
byte[] binData;
int iReadLen = 0;
long iReadedLen = 0;
NetworkStream nStream;
string sTmpFliePath = sFilePath + ".gzeeTmp";
//try
//{
TcpClient tcp = listener.AcceptTcpClient();
if (tcp == null)
return;
tcp.ReceiveBufferSize = Settings.iMaxBufferSize;
FileStream fs = new System.IO.FileStream(sTmpFliePath, System.IO.FileMode.Create);
nStream = tcp.GetStream();
do
{
binData = new byte[Settings.iMaxBufferSize];
iReadLen = nStream.Read(binData, 0, binData.Length);
iReadedLen += iReadLen;
fs.Write(binData, 0, iReadLen);
fs.Flush();


} while (iReadLen >0);
nStream.Flush();
nStream.Close();
tcp.Close();
fs.Close();
File.Move(sTmpFliePath, sFilePath);
if (ReceiveAllCompleted != null)
ReceiveAllCompleted();
//}
//catch (Exception e)
//{
//}
}


[解决办法]
服务器对上传文件大小做限制了?看看下面的解决办法对你有用吗?

=============================
解决办法:(windows2003Server)
1、先在服务里关闭 iis admin service 服务。
2、找到 windows\system32\inetsrv\ 下的 metabase.xml 文件。
3、用纯文本方式打开,找到 ASPMaxRequestEntityAllowed 把它修改为需要的值(可修改为10M即:10240000),默认为:204800,即:200K。
4、存盘,然后重启 iis admin service 服务。
在 IIS 6.0 中,无法下载超过4M的附件时,可以按以下步骤解决:
1、先在服务里关闭 iis admin service 服务。
2、找到 windows\system32\inetsrv\ 下的 metabase.xml 文件。
3、用纯文本方式打开,找到 AspBufferingLimit 把它修改为需要的值(可修改为20M即:20480000)。
4、存盘,然后重启 iis admin service 服务。

[解决办法]
如果解决了,麻烦你贴一下代码哦!我们学习一下,嘿嘿……

读书人网 >C#

热点推荐