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 学习笔记 网络编程 使用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. JS HTML DOM代码(1)

    <!DOCTYPE html> <html> <style type="text/css"> #容器 { width: 400px; heigh ...

  2. unity网络----简单基础

    网络 TCP:与打电话类似,通知服务到位 UDP:与发短信类似,消息发出即可 IP和端口号是网络两大重要成员 端口号(Port)分为知名端口号[0-1024,不开放)和动态端口号[1024,10000 ...

  3. 3-2 Hadoop集群伪分布模式配置部署

    Hadoop伪分布模式配置部署 一.实验介绍 1.1 实验内容 hadoop配置文件介绍及修改 hdfs格式化 启动hadoop进程,验证安装 1.2 实验知识点 hadoop核心配置文件 文件系统的 ...

  4. 写书好累 <HTTP抓包实战>终于出版

    我的新书<HTTP抓包实战>终于开始在京东销售了.内容是关于HTTP包,Fiddler抓包,JMeter发包,适合任何IT工程师阅读.我将自己十年所学的知识,融会贯通总结为一本书.阅读后肯 ...

  5. 微信小程序setData()方法的详解以及对数组/json操作

    此篇文章是本人对setData方法的一些理解,是查阅文档和查找一些其他资料综述的,有所不足希望指正! 直接进入正题! 一.setData()方法: 1.参数接受一个对象,以key,value的形式表示 ...

  6. [Java]LeetCode278. 第一个错误的版本 | First Bad Version

    You are a product manager and currently leading a team to develop a new product. Unfortunately, the ...

  7. [Swift]LeetCode382. 链表随机节点 | Linked List Random Node

    Given a singly linked list, return a random node's value from the linked list. Each node must have t ...

  8. [Swift]LeetCode749. 隔离病毒 | Contain Virus

    A virus is spreading rapidly, and your task is to quarantine the infected area by installing walls. ...

  9. 记一次令人窒息的线上fullgc调优

    今天第二篇采坑了... ... 现场因为处理太急促没有保留,而且是一旁协助,没有收集到所有信息实在是有些遗憾...只能靠记忆回想一些细节 情况是一台服务器一启动就开始full gc,短短1分钟可以有几 ...

  10. [Abp 源码分析]十三、多语言(本地化)处理

    0.简介 如果你所开发的需要走向世界的话,那么肯定需要针对每一个用户进行不同的本地化处理,有可能你的客户在日本,需要使用日语作为显示文本,也有可能你的客户在美国,需要使用英语作为显示文本.如果你还是一 ...