博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
WP7之文件传送利器(web service)
阅读量:6360 次
发布时间:2019-06-23

本文共 4645 字,大约阅读时间需要 15 分钟。

最近买了部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             try40             {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;        }    }}

 

 

 

转载于:https://www.cnblogs.com/rdst/archive/2012/08/11/2633874.html

你可能感兴趣的文章
OpenCms创建网站过程图解——献给OpenCms的初学者们
查看>>
C++ 异常处理机制的实现
查看>>
Freebsd的ports命令
查看>>
分布式系统---幂等性设计
查看>>
【转】时钟周期,机器周期,指令周期的区别
查看>>
MYSQL 更新时间自己主动同步与创建时间默认值共存问题
查看>>
android 屏幕适配
查看>>
Android Activity的4种启动模式
查看>>
leetcode第一刷_Minimum Depth of Binary Tree
查看>>
pm2-webshell —— 基于浏览器的终端控制台
查看>>
Mysql基准测试
查看>>
Session 撰改演示
查看>>
【转】python3 发邮件实例(包括:文本、html、图片、附件、SSL、群邮件)
查看>>
事务隔离级别(图文详解)
查看>>
canvas系列教程08-canvas各种坑
查看>>
浅析package.json中的devdependencies 和 dependencies
查看>>
又一个 iOS 侧边栏组件: SideMenu
查看>>
vue.js 打包遇到的问题
查看>>
【译】更优秀的GraphQL官方中文文档-客户端如何使用
查看>>
git pull遇到的问题
查看>>