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. 宝塔搭建的nginx如何只允许指定IP访问--nginx如何允许指定IP访问,nginx开发者调试模式

    我的博客,向来都是简洁.有用为主,转载请注明出处. 说白了就是往nginx配置文件中加两句话 allow 127.0.0.1; deny all; 允许127.0.0.1访问 然后拒绝其他连接,返回4 ...

  2. 关于“No loop matching the specified signature and casting was found for ufunc lstsq_n”问题的解决

    下面这段代码是使用MatPlotLib绘制数据随时间变化的趋势. import datetime as dt import numpy as np import pandas as pd import ...

  3. 合理编写C++模块(.h、.cc)

    模块划分 合理编写模块的 demo.h.demo.cc 下例为C++为后端服务编写的探活检测服务 health_server.h #ifndef HEALTH_SERVER_H #define HEA ...

  4. Logstash:导入zipcode CSV文件和Geo Search体验

  5. CentOS 7.7系统安装Redis 6.0.3

    前提操作 避免出现如下的错误 yum -y install gcc tcl yum -y install centos-release-scl yum -y install devtoolset-9- ...

  6. Vmware虚拟机设置主机端口映射

    转载自:https://blog.csdn.net/Mrqiang9001/article/details/80820321

  7. [基础] BS/CS 区别 Http/Https 区别 中间件请求

    BS和CS的区别:   1.BS结构:Browser-Server-从浏览器到服务器,浏览器打开的所有内容都属于BS(三大主流浏览器Safari.Chrome和Firefo)   2.CS结构:Cli ...

  8. salesforce零基础学习(一百一十九)In-App Guidance实现引导页操作功能

    本篇参考: https://help.salesforce.com/s/articleView?id=sf.customhelp_lexguid.htm&type=5 https://deve ...

  9. Jupyter notebook导入Pycharm项目的.py文件里的模块及方法

    Jupyter notebook导入Pycharm项目种的.py文件里的模块及方法 需要在Jupyter notebook里调用自己写的代码,过程如下. 首先在Pycharm里写好一个文件,例如DCC ...

  10. slf4j、log4j2及logback使用

    slf4j.log4j2及logback使用 1.问题来源 之前看过关于slf4j.log4j2及logback的介绍,slf4j是门面,log4j2及logback是具体实现,仅使用slf4j门面是 ...