Socket的简单认识

Socket是一种面向连接的通信协议,Socket应用程序是一种C/S(Client端/Server端)结构的应用程序

Socket是两台机器间通信的端点。

Socket是连接运行在网络上的两个程序间的双向通讯端点。

Socket通信原理

  • Server服务端的输入流相当于Client客户端的输出流
  • Server服务端的输出流相当于Client客户端的输入流

注意

  • 文件传输使用字节流(Steam)
  • 使用DataOutputStream,DataOutputStream可以传java的基本类型和流

代码

Server.java

  1. package csmode2;
  2. import java.io.IOException;
  3. import java.net.ServerSocket;
  4. import java.net.Socket;
  5. /**
  6. * @author StarsOne
  7. * @date Create in 2019-4-14 0014 10:53:58
  8. * @description
  9. */
  10. class Server {
  11. public static void main(String[] args) {
  12. try (ServerSocket serverSocket = new ServerSocket(9090)){
  13. System.out.println("服务器已启动...");
  14. while (true) {
  15. System.out.println("等待接收文件");
  16. //调用了accept方法之后,会一直处于等待接受文件的状态
  17. Socket socket = serverSocket.accept();//接收客户端传来的数据
  18. //交给后台线程处理
  19. new AcceptThread(socket.getInputStream()).start();
  20. }
  21. } catch (IOException e) {
  22. e.printStackTrace();
  23. }
  24. }
  25. }

AcceptThread.java

  1. package csmode2;
  2. import java.io.DataInputStream;
  3. import java.io.File;
  4. import java.io.FileOutputStream;
  5. import java.io.IOException;
  6. import java.io.InputStream;
  7. /**
  8. * @author StarsOne
  9. * @date Create in 2019/4/15 0015 14:17
  10. * @description
  11. */
  12. class AcceptThread extends Thread {
  13. private InputStream inputStream;
  14. public AcceptThread(InputStream inputStream) {
  15. this.inputStream = inputStream;
  16. }
  17. @Override
  18. public void run() {
  19. try {
  20. //使用DataInputStream包装输入流
  21. DataInputStream dataInputStream = new DataInputStream(inputStream);
  22. String fileName = dataInputStream.readUTF();
  23. System.out.println(fileName);//在控制台显示文件名
  24. //往某个位置写入文件
  25. FileOutputStream fileOutputStream = new FileOutputStream("Q:\\MY" + File.separator + fileName);
  26. int c = -1;
  27. while ((c = dataInputStream.read()) != -1) {
  28. fileOutputStream.write(c);
  29. fileOutputStream.flush();
  30. }
  31. System.out.println("文件上传成功!");
  32. } catch (IOException e) {
  33. e.printStackTrace();
  34. }
  35. }
  36. }

Client.java

  1. package csmode2;
  2. import java.io.*;
  3. import java.net.Socket;
  4. /**
  5. * @author StarsOne
  6. * @date Create in 2019-4-14 0014 10:53:49
  7. * @description
  8. */
  9. class Client {
  10. public static void main(String[] args) {
  11. // File[] files = new File("E:\\wan\\testfile").listFiles();
  12. //如果是多个文件,只需要把文件放入一个list或者数组中,使用for循环把数组的文件全部上传到服务器
  13. //上传的文件
  14. File file = new File("R:\\动漫图片\\test.jpg");
  15. try(Socket socket = new Socket("localhost", 9090)) {
  16. OutputStream outputStream = socket.getOutputStream();
  17. //使用DataOutputStream
  18. DataOutputStream dataOutputStream = new DataOutputStream(outputStream);
  19. //向服务器端传文件名
  20. dataOutputStream.writeUTF(file.getName());
  21. dataOutputStream.flush();//刷新流,传输到服务端
  22. //向服务器端传文件,通过字节流
  23. //字节流先读取硬盘文件
  24. BufferedInputStream bufferedInputStream = new BufferedInputStream(new FileInputStream(file));
  25. int c = -1;
  26. while ((c=bufferedInputStream.read())!=-1) {
  27. //将读取的文件以字节方式写入DataOutputStream,之后传输到服务端
  28. //这里也可以使用byte[]数据进行读取和写入
  29. dataOutputStream.write(c);
  30. dataOutputStream.flush();
  31. }
  32. } catch (IOException e) {
  33. e.printStackTrace();
  34. }
  35. }
  36. }

Java 学习笔记 网络编程 使用Socket传输文件 CS模式的更多相关文章

  1. Java学习笔记-网络编程

    Java提供了网络编程,并且在实际中有着大量运用 网络编程 网络编程概述 网络模型 OSI参考模型 TCP/IP参考模型 网络通讯要素 IP地址 端口号 传输协议 网络参考模型 网络通讯要素 IP地址 ...

  2. java学习笔记 --- 网络编程(套接字)

    1.Socket通信原理 Socket套接字概述: 网络上具有唯一标识的IP地址和端口号组合在一起才能构成唯一能识别的标识符套接字. 通信的两端都有Socket. 网络通信其实就是Socket间的通信 ...

  3. java学习笔记 --- 网络编程(网络的基础知识)

    1.网络模型: |--OSI(open stystem Interconnection开放式系统互连) |--特点: 是一种异构系统互连的分层结构:提供了控制互连系统交互规则的标准骨架:定义一种抽象结 ...

  4. Android网络编程只局域网传输文件

    Android网络编程之局域网传输文件: 首先创建一个socket管理类,该类是传输文件的核心类,主要用来发送文件和接收文件 具体代码如下: package com.jiao.filesend; im ...

  5. Java学习之网络编程实例

    转自:http://www.cnblogs.com/springcsc/archive/2009/12/03/1616413.html 多谢分享 网络编程 网络编程对于很多的初学者来说,都是很向往的一 ...

  6. Java学习:网络编程总结

    Java网络编程总结 一.概述 计算机网络是通过传输介质.通信设施和网络通信协议,把分散在不同地点的计算机设备互连起来,实现资源共享和数据传输的系统.网络编程就就是编写程序使联网的两个(或多个)设备( ...

  7. Java学习之网络编程

    转自:http://blog.csdn.net/driverking/article/details/6573992 一.网络编程基本概念 1.OSI与TCP/IP体系模型 2.IP和端口 解决了文章 ...

  8. Java 学习之网络编程案例

    网络编程案例 一,概念 1,网络编程不等于网站编程 2,编程只和传输层打交道,即TCP和UDP两个协议 二,案例 1,TCP实现点对点的聊天 Server端:两个输入流:读客户端和控制台,一个输出端: ...

  9. java 学习笔记——网络(Socket)

    阅读方法:将网页放大到200%. 如果你用过用过word应该知道按住ctrl键使用鼠标滚轮缩放.

随机推荐

  1. nginx连接数优化

    一.一般来说nginx 配置文件中对优化比较有作用的为以下几项: 1. worker_processes 8; nginx 进程数,建议按照cpu 数目来指定,一般为它的倍数 (如,2个四核的cpu计 ...

  2. postgrel执行VACUUM报VACUUM cannot run inside a transaction block

    在python脚本里执行: sql_gp1 = "VACUUM dwd_access_record_inout_temp" sql_gp2 = "delete from ...

  3. Deployment Characteristics of "The Edge" in Mobile Edge Computing

    移动边缘计算中的“边缘”部署特性 本文为SIGCOMM 2018 Workshop (Mobile Edge Communications, MECOMM)论文. 本文翻译了论文的关键内容. 摘要 移 ...

  4. FCC(ES6写法) No repeats please

    把一个字符串中的字符重新排列生成新的字符串,返回新生成的字符串里没有连续重复字符的字符串个数.连续重复只以单个字符为准. 例如, aab 应该返回 2 因为它总共有6中排列 (aab, aab, ab ...

  5. JDK的下载,安装,环境变量配置

    JDK 下载地址:http://www.oracle.com/technetwork/java/javase/downloads/index.html 环境变量配置:在"系统变量" ...

  6. vs2017开发Node.js控制台程序

    1,新建项目  NodejsConsoleApp1 2,在项目的根目录下,添加 sayModule.js 文件 //sayModule.js function Say1Module() { this. ...

  7. 浅析Diffie–Hellman

    一.作者 这个密钥交换方法,由惠特菲尔德·迪菲(Bailey Whitfield Diffie).马丁·赫尔曼(Martin Edward Hellman)于1976年发表. 二.说明 它是一种安全协 ...

  8. 又到毕业季,尚学堂喊你免费领取100个Java毕设项目(含源码视频),限时一周哦!

    你还在为毕设发愁?不知道该如何命题?不知道从哪里下手?担心毕设过不了影响毕业? 尚学堂首家隆重推出了刷爆朋友圈的毕设100个项目,别说你还没去下载观看!!最最重要的是:免费!免费!免费!而且限时一周! ...

  9. [Swift]LeetCode73. 矩阵置零 | Set Matrix Zeroes

    Given a m x n matrix, if an element is 0, set its entire row and column to 0. Do it in-place. Exampl ...

  10. [Swift]LeetCode253.会议室 II $ Meeting Rooms II

    Given an array of meeting time intervals consisting of start and end times [[s1,e1],[s2,e2],...] (si ...