南昌网站建设规划方案,网站开发实训目的,wordpress 免插件实现,中国空间站结构示意图前段时间公司项目中遇着需要做文件的远程传输#xff0c;场景是用户通过网页选择一些文件#xff0c;然后提交请求到服务器#xff0c;同时把请求标识传递给本机的TCP文件传输端#xff1b;服务器收到请求后在服务器端创建任务生成保存文件的路径同时通知文件传输端开始传文…前段时间公司项目中遇着需要做文件的远程传输场景是用户通过网页选择一些文件然后提交请求到服务器同时把请求标识传递给本机的TCP文件传输端服务器收到请求后在服务器端创建任务生成保存文件的路径同时通知文件传输端开始传文件到服务器当时是同事用C写的传输端于是便想何不用NET来实现呢本来服务端的大部分程序和客户端程序都是用NET写的于是便有了这篇文章。小生一直是做web开发的对WinForm技术不胜熟悉如有不妥还请拍砖。
在NET框架下可以方便的使用tcplistener和tcpclient两个类来实现tcp编程而无需直接操作socket这也是这两个类方便的地方。对于tcplistener可以理解是用在服务端的仅需要设置一个监听端口即可如
var listener new TcpListener(9000);//监听9000端口
然后调用 Start方法开始监听 listener.Start(10);//挂起队列最大长度10个
再然后就是等待客户端的接入了通常可以用一个无限循环来接受不断请求的客户端
while (true) { if (listener.Pending())//异步接受一个请求 { var client listener.AcceptTcpClient(); //现在就可以使用client爱干嘛干嘛吧 } }
在这里为了实现多个客户端同时访问通常会使用异步的BeginAcceptTcpClient来接受客户端请求
有了client通过GetStream方法就得到当前的网络流使用WriteRead方法即可进行数据写入和读取。
对于tcpclient使用的时候您需要告诉他去连接哪台计算机的哪个端口使用Endpoint来表示然后调用Connect方法就像下面这样
var _endPoint new IPEndPoint(IPAddress.Parse(127.0.0.1),9000); var client new TcpClient(); client.Connect(_endPoint);
如果服务端是开启的这样就能连接上了。
下一步就是读取或者发送数据到服务端了同样可以使用GetStream方法获取到网络流使用WriteRead方法即可进行数据写入和读取。
这些操作都是基于流进行的因此数据本身不具有结构比如对于一个操作服务端需要知道操作名和操作数据这两个东西放在流里一起发送过去没有人会认识这就要求服务端和客户端在传递数据的时候遵循一致的数据结构比如使用这样的 methodgetname#parms:ky
现在介绍下本篇附带的实例
在服务端启动的时候会要求用户输入一个共享的文件夹路径然后启动服务这个服务会提供给客户端这个文件夹下的图片文件列表同时也可以让客户端下载图片
客户端启动时要求用户输入一个服务端的地址然后点击getfilelist来获取远程文件夹的文件列表然后选择一个文件即可下载这个文件到本地。
部分截图
服务端 客户端 源文件下载