• WP7之文件传送利器(web service)


    最近买了部windows phone 做开发用,机身内存16G。由于wp7不能直接通过usb数据线拷贝文件到手机上,只能通过网络形式进行文件传入。第三方提供了一些程序可实现网络传输,但没安装成功。最终自力更生,解决问题。

    由于之前写过一个简单的Web Service,经简单修改WP7文件传送利器终于诞生。

    接下来只要在wp7的浏览器中输入Ip和端口好就可以通过wifi快速下载了。

    以下是源码:

    1、定义Rec方法接收请求

     1 //socket监听
     2         void Rec(object o)
     3         {
     4             Socket s = o as Socket;
     5             if (s != null)
     6             {
     7                 while (socketState)
     8                 {
     9                     Socket send = s.Accept();
    10                     MsgLog(send.RemoteEndPoint.ToString() + "浏览器已连接到服务器!");
    11                     //处理响应
    12                     DataConnection dc = new DataConnection(send, MsgLog, strFilePath);//所有的处理都在这个类中执行
    13                 }
    14             }
    15         }

    2、点击启动服务按钮,开始监听Http请求

     1 public Form1()
     2         {
     3             InitializeComponent();
     4             Control.CheckForIllegalCrossThreadCalls = false;
     5         }
     6         string strFilePath;
     7         bool socketState = true;
     8         private void btnStart_Click(object sender, EventArgs e)
     9         {
    10             string txtStart = btnStart.Text;
    11             string ipAddress = txtIp.Text;
    12             string strPort = txtPort.Text;
    13             if (string.IsNullOrEmpty(strFilePath))
    14             {
    15                 MessageBox.Show("请选择需要传送到手机上的文件");
    16                 return;
    17             }
    18             if (string.IsNullOrEmpty(ipAddress))
    19             {
    20                 MessageBox.Show("请输入本机无线网络的IP地址");
    21                 return;
    22             }
    23             if (string.IsNullOrEmpty(strPort))
    24             {
    25                 MessageBox.Show("请输入50000-65535之间的端口号");
    26                 return;
    27             }
    28 
    29             if (txtStart == "启动服务")
    30             {
    31                 btnStart.Text = "已启动";
    32             }
    33 
    34             IPAddress ip = IPAddress.Parse(ipAddress);
    35             IPEndPoint port = new IPEndPoint(ip, int.Parse(strPort));
    36 
    37             Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
    38 
    39             try
    40             {
    41                 socket.Bind(port);
    42                 socket.Listen(10);
    43                 MsgLog("服务器已启动");
    44 
    45                 //创建一个线程监听
    46                 Thread th = new Thread(Rec);
    47                 th.IsBackground = true;
    48                 th.Start(socket);
    49             }
    50             catch (Exception ex)
    51             {
    52 
    53                 MsgLog(ex.Message);
    54             }
    55         }


    3、处理请求响应类

    namespace WebServer
    {
        delegate void DelShowMsg(string msg);
        class DataConnection
        {
            private Socket socket;
    
            private DelShowMsg delMsg;
    
            //构造函数,外部调用
            public DataConnection(Socket socket, DelShowMsg delMsg,string filePath)
            {
                this.socket = socket;
                this.delMsg = delMsg;
    
                string htmHead = Rec();//获取连接的html文件的头信息
    
                //处理头文件信息,需要获得方法和访问的路径
                Request req = new Request(htmHead);
                //Judge(req.Path);
                SendHtml(200, filePath);
            }
    
            //发送文件
            void SendHtml(int stateNum, string filePath)
            {
                using (FileStream fs = new FileStream(filePath, FileMode.Open))//读取网页文件
                {
                    string fileName =Path.GetFileName(filePath);//获取文件名和扩展名
                    byte[] bs = new byte[fs.Length];
                    fs.Read(bs, 0, bs.Length); //将读取的文件流存储为byte数组
                    try
                    {
                        //生成相应头
                        Response rs = new Response(stateNum, bs.Length, fileName);
                        byte[] htmlHeads = rs.GetHeads(); //获取相应的html头部byte数组
                        socket.Send(htmlHeads);//发送http头
                        socket.Send(bs);//发送网页主体
                        
                        socket.Close();
                        delMsg("---------------------");
                        delMsg(Encoding.UTF8.GetString(htmlHeads));
                        delMsg("连接已关闭");
                        delMsg("---------------------");
                    }
                    catch (Exception ex)
                    {
    
                        delMsg(ex.Message);
                    }
                    
                }
            
            }
            //获取http请求头
            string Rec()
            {
                string s = null;
                try
                {
                    byte[] bs = new byte[1024 * 1024]; //定义byte数组接收读取的文件
                    int n = socket.Receive(bs);  //将读取的文件存放在byte数组中
                    s = Encoding.UTF8.GetString(bs, 0, n); //将指定长度的byte数组文件转换为string
                    delMsg(s);//显示转换string的信息
                }
                catch (Exception ex)
                {
    
                    delMsg(ex.Message);
                }
                return s;
            }
        }
    }
  • 相关阅读:
    python基础:映射和集合类型
    python基础:列表生成式和生成器
    python基础:名称空间与作用域
    http://www.cnblogs.com/fczjuever/archive/2013/04/05/3000680.html
    2016新年总结
    send()和recv()函数详解
    python基础:测量python代码的运行时间
    python函数与方法装饰器
    Python基础:11.2_函数调用
    MySQL学习笔记-数据库后台线程
  • 原文地址:https://www.cnblogs.com/rdst/p/2633874.html
Copyright © 2020-2023  润新知