using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Net;
using System.Net.Sockets;
using System.Threading;
using System.IO;namespace client
{
public partial class frmMain : Form
{
public frmMain()
{
InitializeComponent();
} Thread myThread;
Socket cli;
IPAddress serIP;
string fileName;
int fileLength;
int t=0;
private void btnCon_Click(object sender, EventArgs e)
{
cli = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
serIP = IPAddress.Parse("172.16.145.36");
IPEndPoint ipPoint = new IPEndPoint(serIP, 8008);
cli.Connect(ipPoint);
MessageBox.Show("连接成功!");
} private void btnSend_Click(object sender, EventArgs e)
{
myThread = new Thread(new ThreadStart(sendFile));
myThread.SetApartmentState(ApartmentState.STA);
myThread.Start();
}
FileStream readFile;
void sendFile()
{
byte[] b = new byte[1024 * 1024];
// openFileDialog1.ShowDialog();
openFileDialog1.FileName = "";
if (openFileDialog1.ShowDialog() == DialogResult.OK)
{
readFile = new FileStream(openFileDialog1.FileName, FileMode.Open, FileAccess.Read);
fileLength = Convert.ToInt32(readFile.Length);
fileName = openFileDialog1.FileName;
} b = System.Text.Encoding.BigEndianUnicode.GetBytes(("name|" + fileName + "|" + fileLength.ToString()).ToCharArray());
cli.Send(b);
int num = 0;
CheckForIllegalCrossThreadCalls = false;
progressBar1.Maximum = fileLength;
bool done = false;
timer1.Start();
while (!done)
{
if (num < fileLength)
{
progressBar1.Value = num;
b = new byte[5*1024*1024];
readFile.Read(b, 0, 5 * 1024 * 1024);
cli.Send(b);
lblShowSpeed.Text = "已经发送了:" + (num / 1024 / 1024).ToString() + "M";
num += b.Length;
this.Refresh(); }
else
{
timer1.Stop();
MessageBox.Show("发送完毕" + t.ToString());
done = true;
cli.Close(); } }
//没有执行下面代码????
lblShowSpeed.Text = "平均传输速度:" + (fileLength / 1024 / 1024 / t).ToString() + "M/s";
MessageBox.Show("1"); } private void timer1_Tick(object sender, EventArgs e)
{
t += 1;
}
}
}我这里的发送是一边读取文件一边发送的(while循环里面读多少发多少),然后此处我判断文件是否发送完毕时用一个int变量num来记录之前发送的文件长度,然后跟文件的总长度比较: if (num < fileLength) 问题:怎么当发送完毕后
else
{
timer1.Stop();
MessageBox.Show("发送完毕" + t.ToString());
done = true;
cli.Close(); }
没有执行这下面的内容,服务器那边有提示接受完成,而且文件时完整发送的。就是客户端这里有问题。
MessageBox.Show("发送完毕" + t.ToString());---这句没有显示出来.
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Net;
using System.Net.Sockets;
using System.Threading;
using System.IO;namespace client
{
public partial class frmMain : Form
{
public frmMain()
{
InitializeComponent();
} Thread myThread;
Socket cli;
IPAddress serIP;
string fileName;
int fileLength;
int t=0;
private void btnCon_Click(object sender, EventArgs e)
{
cli = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
serIP = IPAddress.Parse("172.16.145.36");
IPEndPoint ipPoint = new IPEndPoint(serIP, 8008);
cli.Connect(ipPoint);
MessageBox.Show("连接成功!");
} private void btnSend_Click(object sender, EventArgs e)
{
myThread = new Thread(new ThreadStart(sendFile));
myThread.SetApartmentState(ApartmentState.STA);
myThread.Start();
}
FileStream readFile;
void sendFile()
{
byte[] b = new byte[1024 * 1024];
// openFileDialog1.ShowDialog();
openFileDialog1.FileName = "";
if (openFileDialog1.ShowDialog() == DialogResult.OK)
{
readFile = new FileStream(openFileDialog1.FileName, FileMode.Open, FileAccess.Read);
fileLength = Convert.ToInt32(readFile.Length);
fileName = openFileDialog1.FileName;
} b = System.Text.Encoding.BigEndianUnicode.GetBytes(("name|" + fileName + "|" + fileLength.ToString()).ToCharArray());
cli.Send(b);
int num = 0;
CheckForIllegalCrossThreadCalls = false;
progressBar1.Maximum = fileLength;
bool done = false;
timer1.Start();
while (!done)
{
if (num < fileLength)
{
progressBar1.Value = num;
b = new byte[5*1024*1024];
readFile.Read(b, 0, 5 * 1024 * 1024);
cli.Send(b);
lblShowSpeed.Text = "已经发送了:" + (num / 1024 / 1024).ToString() + "M";
num += b.Length;
this.Refresh(); }
else
{
timer1.Stop();
MessageBox.Show("发送完毕" + t.ToString());
done = true;
cli.Close(); } }
//没有执行下面代码????
lblShowSpeed.Text = "平均传输速度:" + (fileLength / 1024 / 1024 / t).ToString() + "M/s";
MessageBox.Show("1"); } private void timer1_Tick(object sender, EventArgs e)
{
t += 1;
}
}
}我这里的发送是一边读取文件一边发送的(while循环里面读多少发多少),然后此处我判断文件是否发送完毕时用一个int变量num来记录之前发送的文件长度,然后跟文件的总长度比较: if (num < fileLength) 问题:怎么当发送完毕后
else
{
timer1.Stop();
MessageBox.Show("发送完毕" + t.ToString());
done = true;
cli.Close(); }
没有执行这下面的内容,服务器那边有提示接受完成,而且文件时完整发送的。就是客户端这里有问题。
MessageBox.Show("发送完毕" + t.ToString());---这句没有显示出来.
{
timer1.Stop();
MessageBox.Show("发送完毕" + t.ToString());
done = true;
cli.Close(); } }
//没有执行下面代码????
lblShowSpeed.Text = "平均传输速度:" + (fileLength / 1024 / 1024 / t).ToString() + "M/s";
MessageBox.Show("1");
有无人能告诉我为什么下面这些没有执行,服务器那边都完整接受好了。
放到while 里面 应该可以
感觉你这个程序有点问题 怎么是死循环