分享

c# winform 端口监听和文件的传输

 江江385 2015-06-11

代码

using System;  
using System.Collections.Generic;  
using System.ComponentModel;  
using System.Data;  
using System.Drawing;  
using System.Text;  
using System.Windows.Forms;  
 
 
using System.Net;  
using System.Threading;  
using System.Net.Sockets;  
 
using System.IO;  
 
namespace TestSocketServerHSTF  
{  
    public partial class Form1 : Form  
    {  
        public Form1()  
        {  
            InitializeComponent();  
 
 
            //不显示出dataGridView1的最后一行空白  
            dataGridView1.AllowUserToAddRows = false;  
        } 
 
 
        #region 定义变量 
 
 
        #endregion 
 
 
 
        #region 进入窗体即启动服务  
 
        private void Form1_Load(object sender, EventArgs e)  
        {  
            //开启接收线程  
            Thread TempThread = new Thread(new ThreadStart(this.StartReceive));  
            TempThread.Start();  
        } 
 
         
        #endregion 
 
 
 
        #region 功能函数  
 
        private void StartReceive()  
        {  
            //创建一个网络端点  
            IPEndPoint ipep = new IPEndPoint(IPAddress.Any, int.Parse("2005"));  
 
            //MessageBox.Show(IPAddress.Any);  
 
            //创建一个套接字  
            Socket server = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);  
 
            //绑定套接字到端口  
            server.Bind(ipep);  
 
            //开始侦听(并堵塞该线程)  
            server.Listen(10);  
 
            //确认连接  
            Socket client = server.Accept();  
 
            //获得客户端节点对象  
            IPEndPoint clientep = (IPEndPoint)client.RemoteEndPoint;  
              
 
 
            //获得[文件名]  
            string SendFileName = System.Text.Encoding.Unicode.GetString(TransferFiles.ReceiveVarData(client));  
            //MessageBox.Show("文件名" + SendFileName);  
 
            //获得[包的大小]  
            string bagSize = System.Text.Encoding.Unicode.GetString(TransferFiles.ReceiveVarData(client));  
            //MessageBox.Show("包大小" + bagSize);  
 
            //获得[包的总数量]  
            int bagCount = int.Parse(System.Text.Encoding.Unicode.GetString(TransferFiles.ReceiveVarData(client)));  
            //MessageBox.Show("包的总数量" + bagCount);  
 
            //获得[最后一个包的大小]  
            string bagLast = System.Text.Encoding.Unicode.GetString(TransferFiles.ReceiveVarData(client));  
            //MessageBox.Show("最后一个包的大小" + bagLast);  
 
            //创建一个新文件  
            FileStream MyFileStream = new FileStream(SendFileName, FileMode.Create, FileAccess.Write);  
 
            //已发送包的个数  
            int SendedCount = 0;  
 
            while (true)  
            {  
                byte[] data = TransferFiles.ReceiveVarData(client);  
                if (data.Length == 0)  
                {  
                    break;  
                }  
                else 
                {  
                    SendedCount++;  
                    //将接收到的数据包写入到文件流对象  
                    MyFileStream.Write(data, 0, data.Length);  
                    //显示已发送包的个数  
                    //MessageBox.Show("已发送包个数"+SendedCount.ToString());  
                }  
            }  
 
            //关闭文件流  
            MyFileStream.Close();  
            //关闭套接字  
            client.Close();  
 
            //填加到dgv里  
            //文件大小,IP,已发送包的个数,文件名,包的总量,最后一个包的大小  
            this.dataGridView1.Rows.Add(bagSize, clientep.Address, SendedCount, SendFileName, bagCount, bagLast);  
 
            //MessageBox.Show("文件接收完毕!");  
 
        } 
 
 
        #endregion 
 
 
 
        #region   拦截Windows消息,关闭窗体时执行  
        protected override void WndProc(ref   Message m)  
        {  
            const int WM_SYSCOMMAND = 0x0112;  
            const int SC_CLOSE = 0xF060;  
            if (m.Msg == WM_SYSCOMMAND && (int)m.WParam == SC_CLOSE)  
            {//捕捉关闭窗体消息     
                //   User   clicked   close   button     
                //this.WindowState = FormWindowState.Minimized;//把右上角红叉关闭按钮变最小化  
 
                ServiceStop();  
            }  
            base.WndProc(ref   m);  
        } 
        #endregion 
 
 
        #region 停止服务  
 
        //停止服务  
        private void ServiceStop()  
        {  
            try 
            {  
 
            }  
            catch { }  
 
            try 
            {  
 
            }  
            catch { }  
        } 
 
        #endregion  
 
    }  
}

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多