http://www.cnblogs.com/bianlan/archive/2012/08/10/2632349.html
启动监听和接收文件的代码如下:
TcpListener listener;
#region 服务器启动监听服务,并开始接收文件
private void btnBegin_Click(object sender, EventArgs e)
{
btnBegin.Enabled = false;
listener = new TcpListener(IPAddress.Parse(txtIp.Text), int.Parse(txtPort.Text));
listener.Start();
ShwMsgForView.ShwMsgforView(lstbxMsgView, "服务器开始监听");
Thread th = new Thread(ReceiveMsg);
th.Start();
th.IsBackground = true;
}
public void ReceiveMsg()
{
while (true)
{
try
{
int size = 0;
int len = 0;
TcpClient client = listener.AcceptTcpClient();
if (client.Connected)
{
//向列表控件中添加一个客户端的Ip和端口,作为发送时客户的唯一标识
listbOnline.Items.Add(client.Client.RemoteEndPoint);
ShwMsgForView.ShwMsgforView(lstbxMsgView, "客户端连接成功" + client.Client.RemoteEndPoint.ToString());
}
NetworkStream stream = client.GetStream();
if (stream != null)
{
SaveFileDialog sfd = new SaveFileDialog();
if (sfd.ShowDialog(this) == System.Windows.Forms.DialogResult.OK)
{
string fileSavePath = sfd.FileName;//获得用户保存文件的路径
FileStream fs = new FileStream(fileSavePath, FileMode.Create, FileAccess.Write);
byte[] buffer = new byte[512];
while ((size = stream.Read(buffer, 0, buffer.Length)) > 0)
{
fs.Write(buffer, 0, size);
len += size;
}
fs.Flush();
stream.Flush();
stream.Close();
client.Close();
ShwMsgForView.ShwMsgforView(lstbxMsgView, "文件接受成功" + fileSavePath);
}
}
}
catch(Exception ex) {
ShwMsgForView.ShwMsgforView(lstbxMsgView, "出现异常:" + ex.Message);
}
}
}
#endregion
客户端选择文件后,即可直接发送文件:
客户端代码如下:
//使用TcpLister和TcpClient向服务端发送文件
private void button1_Click(object sender, EventArgs e)
{
TcpClient client = new TcpClient();
client.Connect(IPAddress.Parse(txtIp.Text), int.Parse(txtPort.Text));
NetworkStream ns = client.GetStream();
FileStream fs = new FileStream(txtFileName.Text, FileMode.Open);
int size = 0;//初始化读取的流量为0
long len = 0;//初始化已经读取的流量
while (len < fs.Length)
{
byte[] buffer = new byte[512];
size = fs.Read(buffer, 0, buffer.Length);
ns.Write(buffer, 0, size);
len += size;
//Pro((long)len);
}
fs.Flush();
ns.Flush();
fs.Close();
ns.Close();
ShowMgs(txtFileName.Text + "文件发送成功");
}
|