大家后。最近刚刚开始学C#网络编程,有很多地方不明白。希望大家指教。
最近做一个软件实习,要求是做一个C/S交互平台,只要能互发信息,传送文件就好了,写传送文件的代码的时候,出现了点问题。希望大家看看。客户端:if (Encoding.ASCII.GetString(bytes, 0, bytesRead) == "accepted") //准备工作成功,开始传输文件
{
Console.WriteLine("Server accepted! File passing begin!"); FileStream fstream = new FileStream("e:\\我的文档\\Visual Studio 2008\\Projects\\Client\\Client\\FileToSend\\" + input, FileMode.Open, FileAccess.Read); byte[] buff = new byte[1024];
int len = 0;
while ((len = fstream.Read(buff, 0, 1024)) != 0)
{
Console.WriteLine("len = " + len.ToString());
fstream.Read(buff, 0, 1024);
client.Client.Send(buff, 0, len, SocketFlags.None);
} client.Client.Send(Encoding.Default.GetBytes("END")); Console.WriteLine("Send finished !"); }这段代码测试过,应该没有问题。
下面是服务器端的代码,问题就出在这里。FileStream fstream = new FileStream("e:\\我的文档\\Visual Studio 2008\\Projects\\Server\\Server\\FileSave\\" + filename, FileMode.OpenOrCreate, FileAccess.ReadWrite);
bytes = new byte[1024];
int len = 1;
Console.WriteLine("Begin to receive !");
while (len != 0)
{
Console.WriteLine("len = " + len.ToString());
len = client.Client.Receive(bytes);
if (Encoding.Default.GetString(bytes) == "END")
{ break; }
fstream.Write(bytes, 0, len);
}
fstream.Flush(); Console.WriteLine("Recevie finished !");
这段代码的执行结果是,服务器端一直无法执行到最后一句代码,文件已被写入,但是写入不全。只写了大部分的文件内容。还有一部分无故失踪。
请大家帮忙看看那里错了。拜托!
最近做一个软件实习,要求是做一个C/S交互平台,只要能互发信息,传送文件就好了,写传送文件的代码的时候,出现了点问题。希望大家看看。客户端:if (Encoding.ASCII.GetString(bytes, 0, bytesRead) == "accepted") //准备工作成功,开始传输文件
{
Console.WriteLine("Server accepted! File passing begin!"); FileStream fstream = new FileStream("e:\\我的文档\\Visual Studio 2008\\Projects\\Client\\Client\\FileToSend\\" + input, FileMode.Open, FileAccess.Read); byte[] buff = new byte[1024];
int len = 0;
while ((len = fstream.Read(buff, 0, 1024)) != 0)
{
Console.WriteLine("len = " + len.ToString());
fstream.Read(buff, 0, 1024);
client.Client.Send(buff, 0, len, SocketFlags.None);
} client.Client.Send(Encoding.Default.GetBytes("END")); Console.WriteLine("Send finished !"); }这段代码测试过,应该没有问题。
下面是服务器端的代码,问题就出在这里。FileStream fstream = new FileStream("e:\\我的文档\\Visual Studio 2008\\Projects\\Server\\Server\\FileSave\\" + filename, FileMode.OpenOrCreate, FileAccess.ReadWrite);
bytes = new byte[1024];
int len = 1;
Console.WriteLine("Begin to receive !");
while (len != 0)
{
Console.WriteLine("len = " + len.ToString());
len = client.Client.Receive(bytes);
if (Encoding.Default.GetString(bytes) == "END")
{ break; }
fstream.Write(bytes, 0, len);
}
fstream.Flush(); Console.WriteLine("Recevie finished !");
这段代码的执行结果是,服务器端一直无法执行到最后一句代码,文件已被写入,但是写入不全。只写了大部分的文件内容。还有一部分无故失踪。
请大家帮忙看看那里错了。拜托!
解决方案 »
- 江湖救急,c++结构体转成c#的问题
- C#窗口最大化问题
- DataSet.AcceptChanges 方法不更新数据
- 连接远程数据库问题???
- 请教一下使用OLEDB,将数据导入到EXCEL文件的问题,那个单引号去不掉,太难看...
- DataGridView单元格获得选中状态怎么做?
- 关于StreamReader,如何正常读取未知编码格式的文本文件?
- 怎么样将页面中的javascript代码中的变量的值赋给后台的C#代码中的变量。
- 如何通过ADO.NET获取数据库的元数据,如表、视图、存储过程、字段、主键等的信息
- 求一个asp.net 2.0下的日期控件
- 如何获取response.write的值
- C#掉用C++接口的Void参数怎么样对应
{
Console.WriteLine("len = " + len.ToString());
fstream.Read(buff, 0, 1024);
client.Client.Send(buff, 0, len, SocketFlags.None);
}这段代码出了问题while ((len = fstream.Read(buff, 0, 1024)) != 0)
{
Console.WriteLine("len = " + len.ToString());
//fstream.Read(buff, 0, 1024);
client.Client.Send(buff, 0, len, SocketFlags.None);
}
while (len != 0)//为什么这个无法起作用?
{
Console.WriteLine("len = " + len.ToString());
len = client.Client.Receive(bytes);//没有数据到达,这里阻塞了,有数据到达,len就不会为0。
if (Encoding.Default.GetString(bytes) == "END")//这个为什么会失效?你假设了对方发送的“END”是一个完整的单独的包,但这几乎是不可能的。
{ break; }
fstream.Write(bytes, 0, len);
}
fstream.Flush();