传送图片程序

前言:
以C#为程序设计基础,传输大图片,并现实。在过程中,采用套接字,单线程同步机制为例子。需要深化,可以采用异步或者多线程的机制,保障能够顺利执行。
      具体代码可以到微云下载【链接:http://url.cn/YpiyxY (密码:QJtp)】
正文:
      客户端
    网络编程,离不开套接字,客户端套接字编程需要了解和理解清楚5个部分
      1、如何初始化套接字socket
            Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)
      2、如何有效的连接
           s.Connect("192.168.1.100",2500);
      3、发送过程
           既然哥在这里说是大文件,肯定回使用s.SendFile来处理发送过程,这也是解决大文件的好方法。
【聪明的同学】哦,原来还有这样的方法,仔细阅读MSDN才行。
【可爱的老师】当你发送文件给对方的时候,对方将会打开套接字等待你,那他怎么知道你究竟有多大呢?当不知道大小的情况下接收,会遇到很大的问题,很不方便我们处理。同学们说说,会有怎样的问题啊?
【聪明的同学】1、不知道现在的空间能否存储。2、套接字也不知道何时终止……老师怎么才能有效解决呢?
【可爱的老师】同学们,我在开始发送之前,把文件的大小,先告之对方,这样就可以啦!
【聪明的同学】那采用多少前缀字节呢?如果没有统一,到时候对方也不知道哪些是前缀,哪些是文件流?
【可爱的老师】在windows 中文件的大小是用long类型来描述的,也就是大致占有8个字节,所以WINDOWS的单独文件大小不会超过2的64次方。于是,在发送大文件之前,统一前8个字节存放文件大小,插入在文件流的最前面,然后采用数据字节流,传送给对方,对方首先也读取前8个字节,了解大小后,开始读取文件,并分析该盘符时候有空间给它存放。
【聪明的同学】老师你既然可以在前面加preStream,我是不是把我的文件名称,大小,扩展名一起存放在lastStream一起发送。
【可爱的老师】真聪明!就是这样处理。
          FileInfo fi = new FileInfo(filepath);  filepath 一般指的是URL 例如:C:\A.JPG
          byte[] len = BitConverter.GetBytes(fi.Length);
s.SendFile(filepath,len,null,TransmitFileOptions.UseDefaultWorkerThread);
s.Shutdown(SocketShutdown.Both);
      4、接收过程
           s.Receive来接收,在这里,哥会在详细讲解。
      5、关闭套接字
           s.close()
服务器
 服务器的套接字,就有所不同,它不是链接对方,而是等待,所以它需要绑定自己能够提供服务的IP地址和相应的端口号,当等待的时候,会出现中断。所以要考虑多线程。
现在主要是处理接收大文件的方法。先取出文件的大小。
byte[] buffer = new byte[8];                
s.Receive(buffer,8,0);
long length = BitConverter.ToInt32(buffer, 0);  
然后申请一个
  MemoryStream MS; 内存流,如果计算器还没有计算到总数那么多,接着循环执行。 
               byte[] buf=new byte[8192]; 
while (count <length)
{
readcount =s.Receive(buf, buf.Length, 0); 
MS.Write(buf, 0, readcount);
count += readcount;
              } 
这样,将把所要的流读入了MS中,如果是图片,可以直接使用Image.FromStream(MS)提供给pictureBox显示,当然也可以使用。
MS.sava去保存你要的格式。

好,基本上讲到这里。

转载于:https://www.cnblogs.com/seemenlee/p/5389950.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/573720.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java中no1_【Java】-- 网络编程のNo.1

在现有的网络中&#xff0c;网络通讯的方式主要有两种&#xff1a;TCP(传输控制协议)方式UDP(用户数据报协议)方式在网络通讯中&#xff0c;TCP方式就类似于拨打电话&#xff0c;使用该种方式进行网络通讯时&#xff0c;需要建立专门的虚拟连接&#xff0c;然后进行可靠的数据传…

优启通怎么重装系统win10_重装系统失败?小编教你安全给神舟战神GX9 Pro重装win10系统方法...

神舟战神GX9 Pro 上市于2016年1月&#xff0c;虽然现在已经停产&#xff0c;但是还是有不少用户依旧十分喜爱这款笔记本。这款笔记本的性能完全对得起它的售价&#xff0c;很多用户都反馈其比外星人电脑要好。对于爱玩游戏的用户而言&#xff0c;对它17.3英寸的显示屏简直欲罢不…

.NET小细节

1、equals()和运算符的区别 C#中有两种不同的相等&#xff1a;引用相等和值相等。值相等是两个对象包含相同的值&#xff1b;引用相等是两个对象引用的是同一个对象。 “”操作符比较的是两个变量的值是否相等&#xff0c;或两个引用是不是指向同一个内存地址&#xff08;类似比…

java exception用法_Java基础回顾_Exception异常使用详解

package 内部类异常包装器;public class 异常 {/*** 1.异常:* 有Error和Exception两个基本子类* 2.Error:* Error表示恢复不是不可能但很困难的情况下的一种严重问题。比如说内存溢出。不可能指望程序能处理这样的情况。* 3.Exception:* 表示一种设计或实现问题。也就是说&…

获得代理ippython_Python搭建代理IP池实现获取IP的方法

使用爬虫时&#xff0c;大部分网站都有一定的反爬措施&#xff0c;有些网站会限制每个 IP 的访问速度或访问次数&#xff0c;超出了它的限制你的 IP 就会被封掉。对于访问速度的处理比较简单&#xff0c;只要间隔一段时间爬取一次就行了&#xff0c;避免频繁访问&#xff1b;而…

20135202闫佳歆--week 8 实验:理解进程调度时机跟踪分析进程调度与进程切换的过程--实验及总结...

week 8 实验&#xff1a;理解进程调度时机跟踪分析进程调度与进程切换的过程 1.环境搭建&#xff1a; rm menu -rf git clone https://github.com/megnning/menu.git cd menu ls make rootfs qemu -kernel ../linux-3.18.6/arch/x86/boot/bzImage -initrd ../rootfs.img -s -S …

java jni技术_JNI技术简介

JNI(Java Native Interface)提供一种Java字节码调用C/C的解决方案&#xff0c;JNI描述的是一种技术。NDK(Native Development Kit)Android NDK 是一组允许您将 C 或 C(“原生代码”)嵌入到 Android 应用中的工具&#xff0c;NDK描述的是工具集。 能够在 Android 应用中使用原生…

python 读取mysql大量数据处理_python使用多线程快速把大量mysql数据导入elasticsearch...

使用python多线程&#xff0c;运行时自定义线程数&#xff0c;自动计算每个线程处理的数据量&#xff0c;连接mysql读取数据&#xff0c;处理成需要的字段入到elasticsearch。运行效果图&#xff1a;10个线程 运行会在这里实时刷新&#xff0c;方便查看每个线程处理到的id数&am…

java web redis_java web redis使用(二)

上篇中已经安装好redis&#xff0c;然后下面就说怎么在java web中用客户端来使用regis使用jedis java客户端一&#xff1a;一个简单的示例代码:public static void main(String[] args) {Jedis jedis new Jedis( "147.151.240.234" , 6379 );jedis.set("foo&…

mysql 主从_搭建mysql主从并编写监控主从状态脚本

要求&#xff1a;两台centos7虚拟机分为主和从安装mysqlyum -y install mysql mysql-server关闭防火墙service iptables stopsetenforce 0上面的主从都做。修改主的配置文件vi /etc/my.cnf#添加server-id1log-binmysqlbinrelay-logrelays之后保存退出重启mysql服务service …

Ubuntu Sublime Text 3 搜狗拼音

已知前置条件 本经验目前在Ubuntu14.04环境下&#xff0c;已有搜狗输入法 for Linux和Sublime Text 3的情况下安装成功。 解决方法步骤 保存下面的代码到文件sublime_imfix.c(位于~目录) #include <gtk/gtkimcontext.h> void gtk_im_context_set_client_window (GtkIMCon…

Java核心技术点之动态代理

本篇博文会从代理的概念出发&#xff0c;介绍Java中动态代理技术的使用&#xff0c;并进一步探索它的实现原理。由于个人水平有限&#xff0c;叙述中难免出现不清晰或是不准确的地方&#xff0c;希望大家可以指正&#xff0c;谢谢大家&#xff1a;&#xff09; 一、概述 1. 什么…

pythonwebview自动化测试_GitHub - githubwzg/python-appium: 基于PageObject UI自动化测试框架,支持Android/iOS...

0910 UPDATE新增控件集参数化&#xff0c;相同测试步骤的Android/iOS可共用一份测试用例不同测试步骤的用例还需要单独写0904 UPDATE优化Android log及crsahinfo相关输出路径新增iOS crashreport解析新增内容&#xff1a;适配iOS提取android crash信息优化report(增加自动填充包…

linux中使用lftp上传下载文件

lftp是linux中一款ftp服务器相比windows中的ftp显得要复杂不少了&#xff0c;下面我来总结一下lftp文件上传&#xff0c;文件下载&#xff0c;及文件查找等等相关命令吧。 lftp连接的几种方法&#xff0c;最常用的是lftp namesite&#xff0c;这样可以不用明文输入密码。 1、lf…

java 数据库 事务 只读_不使用事务和使用只读事务的区别

转转转&#xff0c;&#xff0c;还需要具体验证(决定把readonly类型的事务完全去掉&#xff0c;以提高性能&#xff0c;这里有讨论&#xff1a;http://stackoverflow.com/questions/2562865/spring-transaction-readonly)。。。如果只提交一个查询&#xff0c;有必要用事务吗&a…

python搭建webapi_怎么搭建Web Api

1.通常我们有个web 让后可以有个web api 提供接口2.通常我们分别建两个项目 web api 依赖web的来进行访问(说到底是依赖是IIS)3.我们先建个SmallCode.Test.Web 再建一个SmallCode.Test.Api4.直接在SmallCode.Test.Web 引用 SamllCode.Test.Api 运行通过地址 /api/Order 无法访问…

shell入门之expr的使用

在expr中加减乘除的使用&#xff0c;脚本例如以下&#xff1a; #!/bin/sh #a test about expr v1expr 5 6 echo "$v1" echo expr 3 5 echo expr 6 / 2 echo expr 9 \* 5 echo expr 9 - 6 执行效果 转载于:https://www.cnblogs.com/bhlsheji/p/5401458.html

java中子线程与主线程通信_Android笔记(三十二) Android中线程之间的通信(四)主线程给子线程发送消息...

之前的例子都是我们在子线程(WorkerThread)当中处理并发送消息&#xff0c;然后在主线程(UI线程)中获取消息并修改UI&#xff0c;那么可以不可以在由主线程发送消息&#xff0c;子线程接收呢&#xff1f;我们按照之前的思路写一下代码&#xff1a;packagecn.lixyz.handlertest;…

java开源笔记软件下载_开发常用软件笔记 - ZhaoQian's Blog - OSCHINA - 中文开源技术交流社区...

notepad使用快捷键CtrlH打开“替换对话框”&#xff0c;在每行的开头添加内容。 勾选左下角的“正则表达式”选项 在“查找目标”里输入上尖号“^”&#xff0c;上尖号代表每行的开头 在“替换为”里输入“private String”。然后点"全部替换"按钮&#xff0c;这样每…

python示例apk_Python获取apk文件URL地址实例

工作中经常需要提取apk文件的特定URL地址&#xff0c;如是想到用Python脚本进行自动处理。需要用到的Python基础知识如下:os.walk()函数声明&#xff1a;os.walk(top,topdownTrue,οnerrοrNone)(1)参数top表示需要遍历的顶级目录的路径。(2)参数topdown的默认值是“True”表示…