JavaTCP上传图片代码实例

1.客户端代码

public class UploadPicClient {
 public static void main(String[] args) throws UnknownHostException, IOException {
 // TODO Auto-generated method stub
 //1,创建客户端socket
 Socket s = new Socket("localhost",10088);
 //2,读取客户端要上传的图片文件
 FileInputStream fis = new FileInputStream("D:\\workspace\\day2019.1.17\\lanjing.jpg");
 //3,获取Socket输出流,将读到的图片的数据发送到服务端
 OutputStream out = s.getOutputStream();
 byte[] buf = new byte[1021];
 int len =0;
 while((len=fis.read(buf))!=-1){
  out.write(buf,0,len);
 }
 //告诉服务端说:这边的数据发送完毕让服务端停止读取
 s.shutdownOutput();
 //读取服务端发回的内容
 InputStream in = s.getInputStream();
 byte[] bufIn = new byte[1024];
 int lenIn = in.read(buf);
 String text = new String (buf,0,lenIn);
 System.out.println(text);
 //关闭资源
 fis.close();
 s.close();
 }
}

2.服务端代码

public class UploadPicSever {
public static void main(String[] args) throws IOException {
 // TODO Auto-generated method stub
 //创建tcp的socket服务端
 ServerSocket ss = new ServerSocket(10088);
 //获取客户端
 Socket s = ss.accept();
 String ip = s.getInetAddress().getHostAddress();
 System.out.println(ip+".....connected");
 //读取客户端发来的数据
 InputStream in = s.getInputStream();
 //将读取到的数据存储到一个文件中。
 File dir = new File("D:\\workspace\\day2019.1.17");
 if(!dir.exists()){
 dir.mkdirs();
 }
 File file = new File(dir,"blue.jpg");
 FileOutputStream fos = new FileOutputStream(file);
 byte[] buf = new byte[1024];
 int len = 0;
 while ((len=in.read(buf))!=-1){
 fos.write(buf,0,len);
 }
 //获取socket输出流,将上传成功字样发送给客户端
 OutputStream out = s.getOutputStream();
 out.write("上传成功".getBytes());
 fos.close();
 s.close();
 ss.close();
}

上传后和上传前的图片:

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对我们的支持。如果你想了解更多相关内容请查看下面相关链接

(0)

相关推荐

  • Java压缩之LZW算法字典压缩与解压讲解

    压缩过程: 前面已经写过一篇哈夫曼压缩,LZW字典压缩与哈夫曼压缩的不同之处在于不需要把编码写入文件,编码表是在读文件中生成的,首先将0-255个ASCLL码与对应的数字存入哈希表中,作为基础码表. 这里的后缀为当前 前缀+后缀 如果在码表中存在,前缀等于前缀+后缀.如果不存在,将前缀+后缀所表示的字符串写入编码表编码,同时将前缀写入压缩文件中.这里重点注意一下,一个字节所能表示的数字范围为0-255,所以我们将一个字符的编码变成两个字节写进去,分别写入它的高八位和低八位,比如256即为0000

  • Java中&&与?表达式结合时出现的坑

    前言 首先是背景,刚放假回家比较闲,就把以前写了一些算法题的一个项目拿出来继续写,想把其中的插入排序修改成支持升序和降序的,然后就出现了这个坑,具体是这样的: 先把插入排序的代码摆出来吧. /** * 插入排序 * @param arr 输入数组 * @param order 顺序 1为升序 0为降序 */ static void insertionSort(int arr[],int order){ for (int i = 1; i < arr.length; i++) { int get

  • Java多线程实战之交叉打印的两种方法

    要求效果:先打印5次"printA-",再打印5次"printB-",每次打印间隔1秒,重复循环20次 方式一:使用wait()和notifyAll()方法 public class MyService { private volatile boolean flag = false; public synchronized void printA() { try { while (flag) { wait(); } for (int i = 0; i < 5;

  • Java中流的有关知识点详解

    什么是流? 流:程序和设备之间连接起来的一根用于数据传输的管道,流就是一根管道. 流的分类: 四大基本抽象流(输入流,输出流,字符流,字节流) 文件流 缓冲流 转换流 数据流     流一定是类,但类不一定是流 print流 object流 按数据流的方向不同可以分为输入流和输出流. 按处理数据单位不同可以分为字节流和字符流.(一个字符是两个字节) 按功能不同可以分为节点(原始)流和处理(包裹)流. 字节流         字符流 输入流      InputStream      Reader

  • JavaTCP上传文本文件代码

    基于聊天客户端的基础上的文件(TXT文件)传输 客户端代码: public class UploadClient { public static void main(String[] args) throws UnknownHostException, IOException { // TODO Auto-generated method stub //1,创建socket客户端对象 Socket s = new Socket("localhost",10005); //2,读取本地文

  • Java事件监听机制讲解

    给组件加上监听器 定义一个类,这个类继承ActionListener pubulic class ButListener implements ActionListener{ Public void actionPerformed(ActionEvent e){ }} 给按钮添加动作监听器方法 ButListener but = new ButListen(); jbu.addActionListener(but); 加上监听机制后再监听器ButListener时间处理方法中再创建窗口即可得到点

  • Java五子棋AI实现代码

    思路: ①五子棋界面的实现 ②交互下棋的实现 ③重绘 ④AI,实现人机对战 五子棋和简单AI的实现: 首先将五子棋的界面写出来. 首先我们写一个接口类,定义好棋盘的数据(目的是方便修改). public interface Config { public static final int X0=50;//左上角起点X值 public static final int Y0=50;//左上角起点Y值 public static final int ROWS=15;//横向线数 public sta

  • Java事件处理步骤讲解

    什么是事件? 用户对组件的一个操作,称之为一个事件. 事件源:能够产生事件的GUI组件对象. 事件处理方法:能够接受,解析和处理事件类对象,实现与用户交互功能的方法. 事件监听器:可以处理事件的一个类. 处理事件步骤: 假设事件为XXXX 1.向事件源注册某种事件的事件监听器对象 addXXXXListener(...); 2.设计好可以处理这种事件的事件监听器 class 类名 implements XXXXListener{ 重写XXXXListener接口中的方法 } 说明: 要想设计出能

  • Java多线程实战之单例模式与多线程的实例详解

    1.立即加载/饿汉模式 // 立即加载/饿汉模式 public class MyObject { private static final MyObject myObject = new MyObject(); private MyObject() { } public static MyObject getInstance() { return myObject; } } 立即加载/饿汉模式是在类创建的同时已经创建好一个静态的对象供系统使用,不存在线程安全问题 2.延迟加载/懒汉模式 // 延

  • Java回调函数原理实例与代理模式的区别讲解

    java 回调函数例子,及其原理,与代理模式的区别 回调函数 应用程序(application program)会时常通过API调用库里所预先备好的函数.但是有些库函数(library function)却要求应用先传给它一个函数,好在合适的时候调用,以完成目标任务.这个被传入的.后又被调用的函数就称为回调函数(callback function). 作用: 可以把调用者与被调用者分开.调用者不关心谁是被调用者,所有它需知道的,只是存在一个具有某种特定原型.某些限制条件(如返回值为int)的被调

随机推荐