client----发送数据(输出流)------------(输入)-【管道流处理数据】-(输出)------接收数据(输入流)------server

文件传输:

客户端:

  1. 创建Socket连接对象:创建它对应的对接的iP和端口。。。

  2. 创建一个输出流

  3. 传入文件需要文件流:读取文件      写出文件

  4. 通知 服务器我传输完成

  5. 接受服务器发过来的

  6. 关闭资源
 1 package Demo1.JavaSe.javasocket;
2
3 import java.io.*;
4 import java.net.InetAddress;
5 import java.net.Socket;
6 import java.net.UnknownHostException;
7
8 //文件上传操作
9 public class JavaDemo2 {
10 //客户端
11 public static void main(String[] args) throws Exception {
12 //client----发送数据(输出流)------------(输入)-【管道流处理数据】-(输出)------接收数据(输入流)------server
13
14
15
16 // 1.创建Socket连接对象:创建它对应的对接的iP和端口。。。
17 Socket socket = new Socket(InetAddress.getByName("127.0.0.1"),9999);
18 //2.创建一个输出流
19 OutputStream outputStream = socket.getOutputStream();
20 //3.传入文件需要文件流
21 //读取文件
22 FileInputStream myFileStream = new FileInputStream(new File("src/a123.jpg"));
23 //写出文件
24 byte[] buffer = new byte[1024];
25 int len;
26 while ((len=myFileStream.read(buffer))!=-1){
27 outputStream.write(buffer,0,len);
28 }
29 //同知服务器我传输完成
30 socket.shutdownOutput();
31 System.out.println("上传成功");
32
33 //接受服务器发过来的
34 InputStream isput = socket.getInputStream();
35 ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
36 byte[] buffer2 = new byte[1024];
37 int len2;
38 while ((len2=isput.read(buffer2))!=-1){
39 byteArrayOutputStream.write(buffer2,0,len2);
40 }
41 //打印服务端的确认消息
42 System.out.println(byteArrayOutputStream.toString());
43
44 //关闭资源
45 byteArrayOutputStream.close();
46 isput.close();
47
48 myFileStream.close();
49 outputStream.close();
50 socket.close();
51
52
53
54 }
55
56 }

服务器:

  1. 建服务。ServerSocket。。。

  2. 监听客户端消息:Socket accept = serverSocket.accept();//阻塞式监听

  3. 传入文件需要文件流:读取文件      写出文件

  4. 获取输入流

  5. 文件输出流:输入流 把信息读取到 缓冲区 返回字节数:文件输出流写入文件

  6. 反馈给客户端消息,关闭
package Demo1.JavaSe.javasocket;

import java.io.*;
import java.net.ServerSocket;
import java.net.Socket; public class JavaDemo2Server {
//服务端
public static void main(String[] args) throws IOException {
//1.创建服务。
ServerSocket serverSocket = new ServerSocket(9999);
//2.监听客户端消息
Socket accept = serverSocket.accept();//阻塞式监听
//3.获取输入流
InputStream iput = accept.getInputStream();
//4.文件输出
FileOutputStream receive = new FileOutputStream(new File("receive.jpg"));
byte[] buffer = new byte[1024];
int len;
//输入流 把信息读取到 缓冲区 返回字节数
while ((len = iput.read(buffer))!=-1){
receive.write(buffer,0,len);
}
System.out.println("接受成功"+len+"字节数"); //反馈给客户端
OutputStream outputStream = accept.getOutputStream();
outputStream.write("来自服务器的确认消息!".getBytes()); //5.关闭
receive.close();
iput.close();
serverSocket.close(); }
}

Java网络编程:Socket 通信 2的更多相关文章

  1. java网络编程Socket通信详解

    Java最初是作为网络编程语言出现的,其对网络提供了高度的支持,使得客户端和服务器的沟通变成了现实,而在网络编程中,使用最多的就是Socket.像大家熟悉的QQ.MSN都使用了Socket相关的技术. ...

  2. Java网络编程Socket通信

        TCP(Transmission Control Protocol 传输控制协议)是一种面向连接的.可靠的.基于字节流的传输层通信协议     UDP (User Datagram Proto ...

  3. java网络编程socket\server\TCP笔记(转)

    java网络编程socket\server\TCP笔记(转) 2012-12-14 08:30:04|  分类: Socket |  标签:java  |举报|字号 订阅     1 TCP的开销 a ...

  4. java网络编程socket解析

    转载:http://www.blogjava.net/landon/archive/2013/07/02/401137.html Java网络编程精解笔记2:Socket详解 Socket用法详解 在 ...

  5. Java网络编程——Socket

    网络是连接不同计算机的媒介,不同的计算机依靠网络来互相通信,即传递数据. Java中与网络编程相关的部分主要是Socket(套接字),它作为一种抽象的结构,实现了与通信相关的各类方法,构成一套完整的通 ...

  6. Java网络编程UDP通信原理

    前言 继续今天我们的Java网络编程--TCP和UDP通信 一.TCP和UDP概述 传输层通常以TCP和UDP协议来控制端点与端点的通信   TCP UDP 协议名称 传输控制协议 用户数据包协议 是 ...

  7. day05 Java网络编程socket 与多线程

    java网络编程 java.net.Socket Socket(套接字)封装了TCP协议的通讯细节,是的我们使用它可以与服务端建立网络链接,并通过 它获取两个流(一个输入一个输出),然后使用这两个流的 ...

  8. JAVA网络编程Socket常见问题 【长连接专题】

    一. 网络程序运行过程中的常见异常及处理 第1个异常是 java.net.BindException:Address already in use: JVM_Bind. 该异常发生在服务器端进行new ...

  9. UNIX网络编程——Socket通信原理和实践

    我们深谙信息交流的价值,那网络中进程之间如何通信,如我们每天打开浏览器浏览网页时,浏览器的进程怎么与web服务器通信的?当你用QQ聊天时,QQ进程怎么与服务器或你好友所在的QQ进程通信?这些都得靠so ...

  10. java网络编程——socket实现简单的CS会话

    还记得当年学计网课时用python实现一个简单的CS会话功能,这也是学习socket网络编程的第一步,现改用java重新实现,以此记录. 客户端 import java.io.*; import ja ...

随机推荐

  1. Grafana Mimir:支持乱序的指标采集

    Grafana Mimir:支持乱序的指标采集 译自:New in Grafana Mimir: Introducing out-of-order sample ingestion 很早之前在使用th ...

  2. 利用C库函数time()打印当前系统动态时间

    引入日期和时间头文件 #include<time.h> 用time_t定义一个存储时间的变量获取时间(以秒为单位) time_t t; time (&t); //获取1970年以来 ...

  3. 《Markdown常用语法及快捷键》

    Markdown常用语法及快捷键       [```]+空格--代码格式 [---]+空格--水平分割线 [&emsp]+[;]--空格 [shift]+[tab]--清除当前行的格式

  4. mpdf导出pdf,中文符号乱码

    改源码: 打开vendor/mpdf/mpdf/src/Config/FontVariables.php 在最后一行加入: "gb" => [ 'R' => 'gb.t ...

  5. 使用ConfigMap配置您的应用程序

    转载自:https://kuboard.cn/learning/k8s-intermediate/config/config-map.html ConfigMap 作为 Kubernetes API ...

  6. Logstash & 索引生命周期管理(ILM)

    Grok语法 Grok是通过模式匹配的方式来识别日志中的数据,可以把Grok插件简单理解为升级版本的正则表达式.它拥有更多的模式,默认,Logstash拥有120个模式.如果这些模式不满足我们解析日志 ...

  7. 适用于纯64位Linux系统无需multilib运行win32软件的Wine

    链接: https://pan.baidu.com/s/1qbDGz8mI-TtZLOFvEQetbg 提取码: uk6u 食用方法:解包到~ export HOQEMU=$HOME/hangover ...

  8. [题解] Atcoder Beginner Contest ABC 270 G Ex 题解

    点我看题 G - Sequence in mod P 稍微观察一下就会发现,进行x次操作后的结果是\(A^xS+(1+\cdots +A^{x-1})B\).如果没有右边那一坨关于B的东西,那我们要求 ...

  9. python实验报告(第五周)

    一.实验目的和要求 学会使用字符串的常用操作方法和正确应用正则表达式. 二.实验环境 软件版本:Python 3.10 64_bit 三.实验过程 1.实例1:使用字符串拼接输出一个关于程序员的笑话 ...

  10. ES6中的数组reduce()方法详解

    reduce() 方法对数组中的每个元素执行一个由我们提供的reducer函数(升序执行),将其结果汇总为单个返回值. 1. 语法reduce说明 arr.reduce(callback(accumu ...