小D 写了一个文件传送的小程序,一个人对一个人传送可以实现,但是一个人对另一个人传送完了之后
另外那个人再想对发送过文件的人传送文件的时候就会,出现“该文件在被另外一个进程使用”的报错,请问这是怎么会事哦,还有请问怎么样才能实现象MSN 那样同时可以和几个人传送文件啊,请高人指点
另外那个人再想对发送过文件的人传送文件的时候就会,出现“该文件在被另外一个进程使用”的报错,请问这是怎么会事哦,还有请问怎么样才能实现象MSN 那样同时可以和几个人传送文件啊,请高人指点
解决方案 »
- 如何获取超级终端接收和发送的数据
- winform导出excel必须在客户端安装excel么?
- C# 2005 里如何在datagridview中做chckbox是否被选中
- 这个程序的行为让我很疑惑
- 请问在ASP.NET怎样获取客户端当前登入用户的用户名﹖
- 关于自定义控件的事件处理问题!!加急!!!!可以在加分的!!
- 谁能把ppt文件每一页的标题取出来。找了msdn找不到。求教高手!
- 請哪位兄弟給我提供share point的下載地址,100相送.
- 我在Vs2005中,不小心在文件夹中,不知把那个菜单项的图像删了,让带个菜单都无法设计了,看了看不了啦?(menuStrip1),怎么办啊?
- asp.net,数据库连接,不成功,代码如下?
- 如何知道DataGridView中那几行记录的被修改!
- 如何在datagrid控件上显示记录总数?
{
if(fullname!=null)
{
FileInfo fo = new FileInfo(fullname);
FileStream fs = fo.OpenRead();
int packetsize= 500;//包的尺寸
int packetcount = (int)(fs.Length/(long)packetsize);//包的数量
// this.textBox8.Text=packetcount.ToString();
this.progressBar1.Maximum=packetcount; int LastDataPacket = (int)(fs.Length-((long)(packetsize*packetcount))); //最后一个包的大小 // this.textBox9.Text=LastDataPacket.ToString();
IPEndPoint ipep=new IPEndPoint(IPAddress.Any,int.Parse(localPort));//创建一个网络端点
Socket server=new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);//创建一个套接字
server.Bind(ipep);//绑定套接字到端口
server.Listen(10);//开始侦听(并堵塞该线程)
while(true)
{
client1=server.Accept();
if(client1.Connected)
{
//获得客户端节点对象
Thread tc = new Thread(new ThreadStart(listenclient)); tc.Start();
}
}
// IPEndPoint clientep=(IPEndPoint)client.RemoteEndPoint;//获得客户端的IP地址
//
//
// // this.textBox7.Text=clientep.Address.ToString();
//
// PTP.EzoneModule.SendVarData(client,System.Text.Encoding.Unicode.GetBytes(fo.Name)); //发送[文件名]到客户端
//
// PTP.EzoneModule.SendVarData(client,System.Text.Encoding.Unicode.GetBytes(packetsize.ToString()));//发送[包的大小]到客户端
//
// PTP.EzoneModule.SendVarData(client,System.Text.Encoding.Unicode.GetBytes(packetcount.ToString()));//发送[包的总数量]到客户端
//
// PTP.EzoneModule.SendVarData(client,System.Text.Encoding.Unicode.GetBytes(LastDataPacket.ToString()));//发送[最后一个包的大小]到客户端
//
// //数据包
// byte[]data=new byte[packetsize];
// //开始循环发送数据包
// try
// {
// for(int i=0;i<packetcount;i++)
// {
// //从文件流读取数据并填充数据包
// fs.Read(data,0,data.Length);
// //发送数据包
// PTP.EzoneModule.SendVarData(client,data);
// //显示发送数据包的个数
// // this.textBox10.Text=((int)(i+1)).ToString();
// //进度条值的显示
// this.progressBar1.PerformStep();
// }
//
//
// if(LastDataPacket!=0)
// //如果还有多余的数据包,则应该发送完毕!
// {
// data=new byte[LastDataPacket];
// fs.Read(data,0,data.Length);
// fs.Close();
// PTP.EzoneModule.SendVarData(client,data);
// this.progressBar1.Value=this.progressBar1.Maximum;
// } //关闭套接字
client1.Close();
server.Close();
//关闭文件流
fs.Close();
ipep=null;
this.button2.Enabled=true;
this.button5.Enabled=false;
this.button4.Enabled=false;
// Thread.CurrentThread.Abort();
MessageBox.Show("文件传输完毕!");
// catch(Exception e)
// {
// client.Close();
// server.Close();
// //关闭文件流
// fs.Close();
// this.button5.Enabled=false;
// this.button4.Enabled=false;
//
// MessageBox.Show(e.Message);
// MessageBox.Show(UserAlias);
//
//
// }
}
else
{
MessageBox.Show("");
}
} private void listenclient()
{
FileInfo fo = new FileInfo(fullname);
FileStream fs = fo.OpenRead();
int packetsize= 500;//包的尺寸
int packetcount = (int)(fs.Length/(long)packetsize);//包的数量
// this.textBox8.Text=packetcount.ToString();
this.progressBar1.Maximum=packetcount; int LastDataPacket = (int)(fs.Length-((long)(packetsize*packetcount))); //最后一个包的大小 // this.textBox9.Text=LastDataPacket.ToString();
Socket client =client1;
IPEndPoint clientep=(IPEndPoint)client.RemoteEndPoint;//获得客户端的IP地址
// this.textBox7.Text=clientep.Address.ToString();
PTP.EzoneModule.SendVarData(client,System.Text.Encoding.Unicode.GetBytes(fo.Name)); //发送[文件名]到客户端 PTP.EzoneModule.SendVarData(client,System.Text.Encoding.Unicode.GetBytes(packetsize.ToString()));//发送[包的大小]到客户端 PTP.EzoneModule.SendVarData(client,System.Text.Encoding.Unicode.GetBytes(packetcount.ToString()));//发送[包的总数量]到客户端
PTP.EzoneModule.SendVarData(client,System.Text.Encoding.Unicode.GetBytes(LastDataPacket.ToString()));//发送[最后一个包的大小]到客户端
//数据包
byte[]data=new byte[packetsize];
//开始循环发送数据包
for(int i=0;i<packetcount;i++)
{
//从文件流读取数据并填充数据包
fs.Read(data,0,data.Length);
//发送数据包
PTP.EzoneModule.SendVarData(client,data);
//显示发送数据包的个数
// this.textBox10.Text=((int)(i+1)).ToString();
//进度条值的显示
this.progressBar1.PerformStep();
}
if(LastDataPacket!=0)
//如果还有多余的数据包,则应该发送完毕!
{
data=new byte[LastDataPacket];
fs.Read(data,0,data.Length);
PTP.EzoneModule.SendVarData(client,data);
this.progressBar1.Value=this.progressBar1.Maximum;
} }
#endregion
#region 开始接收文件
private void StartReceive()
{
try
{
//指向远程服务端节点
IPEndPoint ipep=new IPEndPoint(IPAddress.Parse(senderIP),int.Parse(senderPort));
//创建套接字
Socket client=new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);
//连接到发送端
client.Connect(ipep);
//获得[文件名]
string SendFileName=System.Text.Encoding.Unicode.GetString(PTP.EzoneModule.ReceiveVarData(client));
// this.textBox2.Text=SendFileName;
//获得[包的大小]
string pocketbig=System.Text.Encoding.Unicode.GetString(PTP.EzoneModule.ReceiveVarData(client));
//获得[包的总数量]
this.textBox8.Text=System.Text.Encoding.Unicode.GetString(PTP.EzoneModule.ReceiveVarData(client));
this.progressBar1.Maximum=int.Parse(this.textBox8.Text);
//获得[最后一个包的大小]
string pocketbigsize=System.Text.Encoding.Unicode.GetString(PTP.EzoneModule.ReceiveVarData(client));
//创建一个新文件
FileStream MyFileStream=new FileStream(SendFileName,FileMode.Create,FileAccess.Write);
//已发送包的个数
// NetworkStream ns = new NetworkStream(client);
int SendedCount=0;
while(true)
{
byte[]data=PTP.EzoneModule.ReceiveVarData(client);
if(data.Length==0)
{
break;
}
else
{
SendedCount++;
//将接收到的数据包写入到文件流对象
MyFileStream.Write(data,0,data.Length);
// MyFileStream.Close();
// ns.Write(data,0,data.Length);
//显示已发送包的个数
// this.textBox10.Text=SendedCount.ToString();
//进度条值的显示
this.progressBar1.PerformStep();
}
}
this.progressBar1.Value=this.progressBar1.Maximum;
//关闭文件流
MyFileStream.Close();
//关闭套接字
client.Close();
this.button1.Enabled=true;
this.button5.Enabled=false;
this.button4.Enabled=false;
// Thread.CurrentThread.Abort();
MessageBox.Show("文件接收完毕!");
}
catch(Exception e)
{
this.button5.Enabled=false;
this.button4.Enabled=false;
MessageBox.Show(e.Message);
MessageBox.Show(UserAlias);
}
}
#endregion
这是我发送和接收的代码 ,请高手帮我看看哪里出问题了哦没,为什么总是不行哦