Socket的简单认识

Socket是一种面向连接的通信协议,Socket应用程序是一种C/S(Client端/Server端)结构的应用程序 Socket是两台机器间通信的端点。 Socket是连接运行在网络上的两个程序间的双向通讯端点。

Socket通信原理

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

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

注意

文件传输使用字节流**(Steam)**

使用DataOutputStream,DataOutputStream可以传java的基本类型和流

代码

Server.java

package csmode2;

import java.io.IOException;

import java.net.ServerSocket;

import java.net.Socket;

/**

* @author StarsOne

* @date Create in 2019-4-14 0014 10:53:58

* @description

*/

class Server {

public static void main(String[] args) {

try (ServerSocket serverSocket = new ServerSocket(9090)){

System.out.println("服务器已启动...");

while (true) {

System.out.println("等待接收文件");

//调用了accept方法之后,会一直处于等待接受文件的状态

Socket socket = serverSocket.accept();//接收客户端传来的数据

//交给后台线程处理

new AcceptThread(socket.getInputStream()).start();

}

} catch (IOException e) {

e.printStackTrace();

}

}

}

AcceptThread.java

package csmode2;

import java.io.DataInputStream;

import java.io.File;

import java.io.FileOutputStream;

import java.io.IOException;

import java.io.InputStream;

/**

* @author StarsOne

* @date Create in 2019/4/15 0015 14:17

* @description

*/

class AcceptThread extends Thread {

private InputStream inputStream;

public AcceptThread(InputStream inputStream) {

this.inputStream = inputStream;

}

@Override

public void run() {

try {

//使用DataInputStream包装输入流

DataInputStream dataInputStream = new DataInputStream(inputStream);

String fileName = dataInputStream.readUTF();

System.out.println(fileName);//在控制台显示文件名

//往某个位置写入文件

FileOutputStream fileOutputStream = new FileOutputStream("Q:\\MY" + File.separator + fileName);

int c = -1;

while ((c = dataInputStream.read()) != -1) {

fileOutputStream.write(c);

fileOutputStream.flush();

}

System.out.println("文件上传成功!");

} catch (IOException e) {

e.printStackTrace();

}

}

}

Client.java

package csmode2;

import java.io.*;

import java.net.Socket;

/**

* @author StarsOne

* @date Create in 2019-4-14 0014 10:53:49

* @description

*/

class Client {

public static void main(String[] args) {

// File[] files = new File("E:\\wan\\testfile").listFiles();

//如果是多个文件,只需要把文件放入一个list或者数组中,使用for循环把数组的文件全部上传到服务器

//上传的文件

File file = new File("R:\\动漫图片\\test.jpg");

try(Socket socket = new Socket("localhost", 9090)) {

OutputStream outputStream = socket.getOutputStream();

//使用DataOutputStream

DataOutputStream dataOutputStream = new DataOutputStream(outputStream);

//向服务器端传文件名

dataOutputStream.writeUTF(file.getName());

dataOutputStream.flush();//刷新流,传输到服务端

//向服务器端传文件,通过字节流

//字节流先读取硬盘文件

BufferedInputStream bufferedInputStream = new BufferedInputStream(new FileInputStream(file));

int c = -1;

while ((c=bufferedInputStream.read())!=-1) {

//将读取的文件以字节方式写入DataOutputStream,之后传输到服务端

//这里也可以使用byte[]数据进行读取和写入

dataOutputStream.write(c);

dataOutputStream.flush();

}

} catch (IOException e) {

e.printStackTrace();

}

}

}

java文件传输连接方式_Java 学习笔记 网络编程 使用Socket传输文件 CS模式相关推荐

  1. JAVA不同类型数组重载_java学习笔记--java中的方法与数组

    方法 完成特定功能的代码块 方法的格式 修饰符 返回值类型 方法名(参数类型 参数名1,参数类型 参数名2...){ //方法体 return 返回值: } 方法的调用方式 通过方法名调用方法 根据形 ...

  2. java画笔覆盖在界面_Java学习笔记:swing画笔工具Graphics,刷新页面,键盘事件,随机数等【诗书画唱】...

    Graphics:画笔工具 setColor:设置画笔颜色 DrawRect:空心矩形 fillRect:实心矩形 DrawOavl:空心圆 fillOavl:实心圆 DrawLine:画线(注意) ...

  3. java 学习笔记-网络编程(八)

    网络编程 标签:学习各种网络协议的桥梁 什么是计算机网络 计算机网络的作用:资源共享和信息传递. 计算机网络的组成: a) 计算机硬件:计算机(大中小型服务器,台式机.笔记本等).外部设备(路由器.交 ...

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

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

  5. Python学习笔记:网络编程

    前言 最近在学习深度学习,已经跑出了几个模型,但Pyhton的基础不够扎实,因此,开始补习Python了,大家都推荐廖雪峰的课程,因此,开始了学习,但光学有没有用,还要和大家讨论一下,因此,写下这些帖 ...

  6. Go语言学习笔记 (网络编程)

    网络编程分层概念:​ 层与协议 简单的例子: package mainimport ("fmt""net" )func main() {listenner, e ...

  7. java如何显示当天世界_Java学习笔记——显示当前日期的三种方式

    一.Date类:这是一种过时的表达方式 import java.util.Date;Date date = new Date(); System.out.println((1900+date.getY ...

  8. java 怎么判别注释符_java学习笔记二(注释、关键字、标识符)

    了解一下几个概念:注释.关键字.标识符. 然后记住java主程序的基本结构,再通过编写hello world案例来进一步了解java程序. 1.注释 如果程序中代码太多时,方便我们查看代码,所以就要给 ...

  9. java继承的终极奥义_java学习笔记12-继承

    继承就是子类继承父类的特征和行为 有时候单一划分某个类别并不能处理所有情况,某些类别下有明显不同的子类,这些子类虽然拥有类似的行为和属性,但是他们各自发生的这些行为的方式或者属性对某些结果的影响是不一 ...

最新文章

  1. python中json和字典相互转化
  2. 山东华为服务器安装系统,山东云服务器平台安装
  3. AlertDialog的使用(二):分别创建
  4. C++线性序列容器vector简单总结
  5. 蓝桥杯练习系统习题-算法训练3
  6. java prototype是什么,java设计模式-原型模式(Prototype)
  7. git显示服务器所有分支,git 查看所有远程分支以及同步
  8. linux中的信号1——信号概述
  9. c++对数函数_DS-K1T105M-C 海康威视考勤门禁一体机 支持刷卡+密码 DS-K1T105E/M/C-C
  10. c++随机打乱数组_第四天 Java 数组与排序
  11. python产品发布会_大型发布会现场的 Wi-Fi 应该如何搭建?
  12. Redis中Pipeline的使用
  13. 干货|80天自学通过高级项目管理师
  14. socket与sock的联系
  15. python数据分析模型建立_一个完整的数据分析案例 | 用Python建立客户流失预测模型(含源数据+代码)...
  16. 惠普打印机2132故障灯大全图解_绝对干货!二手打印机选购攻略!
  17. 我帮您_学习资源库,给您学不完的精彩
  18. 【毕业设计】大数据电商销售预测分析 - python 数据分析
  19. 习题4-5 换硬币 将一笔零钱换成5分、2分和1分的硬币,要求每种硬币至少有一枚,有几种不同的换法?
  20. 解决$emit第一次触发事件失效问题

热门文章

  1. 【操作系统复习】操作系统的特征
  2. Leetcode--542. 01 矩阵(java)
  3. python3层装饰器_python三层装饰器python字符串,数值计算
  4. 私有private成员和保护protected成员的区别
  5. tf.nn.dropout
  6. 在状态栏中显示鼠标位置坐标
  7. Django搭建简易博客
  8. 爆款专栏《Python 黑科技》目录导航丨进度:12/50
  9. python Lambda 表达式
  10. python 结巴分词(jieba)学习