我传送一张图片,10次里有1次能传送成功,图片完整,其余都是缺胳膊少腿的文件,图片都花了...为什么会这样啊
这里是主要的代码服务器
private void button1_Click(object sender, EventArgs e)
{
try
{
listener = new TcpListener(8910);
listener.Start();
toolStripStatusLabel1.Text = "监听中...";
thread = new Thread(new ThreadStart(recieve));
thread.Start();
}
catch (Exception exce)
{
MessageBox.Show(exce.ToString());
}
}
private void recieve()
{
sock = listener.AcceptSocket();
if (sock.Connected)
{
toolStripStatusLabel1.Text = "与客户连接中...";
while(true)
{
ns = new NetworkStream(sock);
if (sock.Receive(mybyte, mybyte.Length,0) != 0)
{
ns.Flush();
String filename = System.Text.Encoding.ASCII.GetString(mybyte).Trim(new char[]{'\0'});
fs = new FileStream("e:\\to\\"+filename, FileMode.OpenOrCreate);
while (sock.Reseive(mybyte,mybyte.Length,0) != 0)
{
fs.Write(mybyte, 0, mybyte.Length);
}
}
ns.Close();
fs.Close();
MessageBox.Show("接受完成");
} }客户端
private void button1_Click(object sender, EventArgs e)
{
if(openFileDialog1.ShowDialog()==DialogResult.OK)
{
fs=new FileStream(openFileDialog1.FileName,FileMode.Open);
ns=mytc.GetStream();
String filename = openFileDialog1.SafeFileName;
mybyte=System.Text.Encoding.ASCII.GetBytes(filename.ToCharArray());
ns.Write(mybyte, 0, mybyte.Length);
ns.Flush();
while (fs.Read(mybyte, 0, mybyte.Length) != 0)
{
ns.Write(mybyte, 0, mybyte.Length);
ns.Flush();
}
ns.Close();
fs.Close();
MessageBox.Show("发送完成");
} }
这里是主要的代码服务器
private void button1_Click(object sender, EventArgs e)
{
try
{
listener = new TcpListener(8910);
listener.Start();
toolStripStatusLabel1.Text = "监听中...";
thread = new Thread(new ThreadStart(recieve));
thread.Start();
}
catch (Exception exce)
{
MessageBox.Show(exce.ToString());
}
}
private void recieve()
{
sock = listener.AcceptSocket();
if (sock.Connected)
{
toolStripStatusLabel1.Text = "与客户连接中...";
while(true)
{
ns = new NetworkStream(sock);
if (sock.Receive(mybyte, mybyte.Length,0) != 0)
{
ns.Flush();
String filename = System.Text.Encoding.ASCII.GetString(mybyte).Trim(new char[]{'\0'});
fs = new FileStream("e:\\to\\"+filename, FileMode.OpenOrCreate);
while (sock.Reseive(mybyte,mybyte.Length,0) != 0)
{
fs.Write(mybyte, 0, mybyte.Length);
}
}
ns.Close();
fs.Close();
MessageBox.Show("接受完成");
} }客户端
private void button1_Click(object sender, EventArgs e)
{
if(openFileDialog1.ShowDialog()==DialogResult.OK)
{
fs=new FileStream(openFileDialog1.FileName,FileMode.Open);
ns=mytc.GetStream();
String filename = openFileDialog1.SafeFileName;
mybyte=System.Text.Encoding.ASCII.GetBytes(filename.ToCharArray());
ns.Write(mybyte, 0, mybyte.Length);
ns.Flush();
while (fs.Read(mybyte, 0, mybyte.Length) != 0)
{
ns.Write(mybyte, 0, mybyte.Length);
ns.Flush();
}
ns.Close();
fs.Close();
MessageBox.Show("发送完成");
} }
解决方案 »
- vs 2008 vsto word 2003插件安装
- 单击一个窗体按钮时触发另一个窗体按钮事件
- 树的反向复制
- 救命呀,未与信任 SQL Server 连接相关联
- 怎样在Silverlight中打开站点的“aspx页面”
- 如何把11001001100110110010011001101100100110011011001001100110(二进制)转化为字符串啊(MM-急!!!)
- 请问如何在C#里面调用用标准C++写的头文件和源代码
- 急! 50分求助,关于WPF控件TabItem的数据绑定问题?在线等~~
- 在winform中对datagrid里面值修改后怎样更新到数据库?(帮顶有分)
- 菜鸟问题!
- datagridview checkbox列加位置控制后选中时为啥式样还是居中?
- 关于标签的问题
==================
第三个参数的值适当的加大一些。
楼主这种情况我也遇到过,不过,我解决的方法是,比对文件大小字节数,如果不同 就删除接受方的文件,返回false,说明传输失败。
{
ns.Write(mybyte, 0, mybyte.Length);
ns.Flush();
}
这样写是不行的 应为FileStream类的Read()方法返回的是读取数据的实际长度
有时候文件长度的问题 最后一次写入的长度不一定是mybyte.Length
int factSize=0;
while((factSize=fs.Read(mybyte,0,mybyte.Length))>0)
{
ns.Write(mybyte,0,a);
ns.Flush();
}
你吧发送数据的地方 这样写试试
估计你也是在局域网上面 更不可能了