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)
//{
//}
}