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 + "文件发送成功"); }
联系客服