java 26 - 8 网络编程之 TCP协议上传图片

上次的是上传TXT文件,这次上传的是图片。同样,上传成功需要反馈给客户端。

区别:

  TXT文件用记事本打开,我们可以看得懂,所以用了缓冲字符流,对通道内的字节流进行包装了。

  而图片用记事本打开,我们看不懂,所以就用缓冲字节流,只需要把通道内的字节流转换成高效字节流就可以了。

客户端:

  

 1 public class ClineDemo {
 2     public static void main(String[] args) throws IOException {
 3
 4         // 创建Socket对象
 5         Socket s = new Socket("172.19.12.233", 10010);
 6
 7         // 封装图片,图片只能使用字节流,为了高效,用缓冲字节流
 8         BufferedInputStream bi = new BufferedInputStream(new FileInputStream(
 9                 "java程序员.jpg"));
10
11         // 把通道中的字节流包装成缓冲字节流
12         BufferedOutputStream bo = new BufferedOutputStream(s.getOutputStream());
13
14         // 接收图片,并发送给服务器
15         byte[] bys = new byte[1024];
16         int len = 0;// 读取的实际长度,没有数据时,为-1
17         while ((len = bi.read(bys)) != -1) {
18             bo.write(bys, 0, len);
19             bo.flush();
20         }
21
22         // 提醒服务器已经读取完毕,终止
23         s.shutdownOutput();
24
25         // 接收反馈
26         InputStream in = s.getInputStream();
27         byte[] by = new byte[1024];
28         //肯定有内容的,就不判断了
29         int len1 = in.read(by);
30         String str = new String(by,0,len1);
31         System.out.println(str);
32
33         // 释放资源
34         bi.close();
35         s.close();
36     }
37 }

服务器:

 1 public class ServerDemo {
 2     public static void main(String[] args) throws IOException {
 3
 4         // 创建ServerSocket对象,监听
 5         ServerSocket ss = new ServerSocket(10010);
 6
 7         // 创建Socket对象
 8         Socket s = ss.accept();
 9
10         // 把通道中的字节流转成缓冲字节流
11         BufferedInputStream bi = new BufferedInputStream(s.getInputStream());
12
13         // 封装图片目录
14         BufferedOutputStream bo = new BufferedOutputStream(
15                 new FileOutputStream("java.jpg"));
16
17         // 获取图片的数据,并输出
18         byte[] bys = new byte[1024];
19         int len = 0;
20         while ((len = bi.read(bys)) != -1) {
21             bo.write(bys, 0, len);
22             bo.flush();
23         }
24
25         //给客户端反馈
26         OutputStream op = s.getOutputStream();
27         op.write("图片上传成功".getBytes());
28
29         //释放资源
30         s.close();
31         bo.close();
32
33     }
34 }
时间: 2024-12-28 00:41:24

java 26 - 8 网络编程之 TCP协议上传图片的相关文章

java 26 - 8 网络编程之 TCP协议的练习

TCP练习: 1.客户端键盘录入,服务器输出文本文件 客户端代码: 1 public class ClientDemo { 2 public static void main(String[] args) throws IOException { 3 4 // 创建socket对象 5 Socket s = new Socket("172.19.12.233", 10010); 6 7 // 创建键盘输入流,用转换流包装成字符流 8 BufferedReader br = new Bu

java 25 - 4 网络编程之 UDP协议传输的代码优化

UDP协议的输出端: 1 /* 2 UDP发送数据: 3 A:创建Socket发送端对象 4 B:创建数据报包(把数据打包) 5 C:调用Socket对象发送数据报包 6 D:释放资源(底层是IO流) 7 */ 8 public class NewSend { 9 10 public static void main(String[] args) throws IOException { 11 12 // A:创建Socket发送端对象 13 DatagramSocket ds = new Da

java 25 - 4 网络编程之 UDP协议传输思路

UDP传输 两个类:DatagramSocket与DatagramPacket(具体看API) A:建立发送端,接收端. B:建立数据包. C:调用Socket的发送接收方法. D:关闭Socket. E:发送端与接收端是两个独立的运行程序. UDP传输-发送端思路 UDP发送数据: A:创建Socket发送端对象 B:创建数据报包(把数据打包) C:调用Socket对象发送数据报包 D:释放资源(底层是IO流) UDP传输-发送端代码 1 public static void main(Str

java网络编程之TCP实例

Dgram类 package Socket; import java.net.DatagramPacket; import java.net.InetAddress; public class Dgram { public static DatagramPacket toDatagram(String s, InetAddress destIA, int destPort) { byte[] buf = new byte[s.length() + 1]; s.getBytes(0, s.leng

网络编程之TCP/IP各层详解

网络编程之TCP/IP各层详解 我们将应用层,表示层,会话层并作应用层,从TCP/IP五层协议的角度来阐述每层的由来与功能,搞清楚了每层的主要协议,就理解了整个物联网通信的原理. 首先,用户感知到的只是最上面一层--应用层,自上而下每层都依赖于下一层,所以我们从最下层开始切入,比较好理解. 每层都运行特定的协议,越往上越靠近用户,越往下越靠近硬件. 一.物理层 由来:孤立的计算机之间要一起"玩耍",就必须接入Internet,即计算机之间必须完成组网. 物理层功能:主要是基于电器特性发

扯谈网络编程之Tcp SYN flood洪水攻击

简介 TCP协议要经过三次握手才能建立连接: (from wiki) 于是出现了对于握手过程进行的攻击.攻击者发送大量的FIN包,服务器回应(SYN+ACK)包,但是攻击者不回应ACK包,这样的话,服务器不知道(SYN+ACK)是否发送成功,默认情况下会重试5次(tcp_syn_retries).这样的话,对于服务器的内存,带宽都有很大的消耗.攻击者如果处于公网,可以伪造IP的话,对于服务器就很难根据IP来判断攻击者,给防护带来很大的困难. 攻与防 攻击者角度 从攻击者的角度来看,有两个地方可以

linux网络编程之TCP/IP基础篇(一)

从今天起,将会接触到网络编程,平台是linux,实现语言C语言,最后将会实现一个简易的miniftp服务器. 主要的内容安排为:linux网络编程之TCP/IP基础篇,SOCKET编程篇,进程间通信篇,线程篇,实战ftp篇. 1.ISO/OSI参考模型:open system interconnection开放系统互联模型是由OSI(international organization for standardization )国际标准化组织定义的网络分层模型,共七层. 各层的具体含义: 物理层

网络编程之TCP编程

html,body,div,span,applet,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,abbr,acronym,address,big,cite,code,del,dfn,em,img,ins,kbd,q,s,samp,small,strike,strong,sub,sup,tt,var,b,u,i,center,dl,dt,dd,ol,ul,li,fieldset,form,label,legend,table,caption

Java网络编程之TCP通信

一.概述 Socket类是Java运行clientTCP操作的基础类,这个类本身使用代码通过主机操作系统的本地TCP栈进行通信. Socket类的方法会建立和销毁连接,设置各种Socket选项. ServerSocket类是Java执行server端操作的基础类,该类执行于server,监听入站TCP连接.每一个socketserver监听server的某个port.当远程主机的client尝试连接此port时.server就被唤醒.并返回一个表示两台主机之间socket的正常Socket对象.