Java网络编程:Socket 通信 2
client----发送数据(输出流)------------(输入)-【管道流处理数据】-(输出)------接收数据(输入流)------server
文件传输:
客户端:
创建Socket连接对象:创建它对应的对接的iP和端口。。。
创建一个输出流
传入文件需要文件流:读取文件 写出文件
通知 服务器我传输完成
接受服务器发过来的
- 关闭资源
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 }
服务器:
建服务。ServerSocket。。。
监听客户端消息:Socket accept = serverSocket.accept();//阻塞式监听
传入文件需要文件流:读取文件 写出文件
获取输入流
文件输出流:输入流 把信息读取到 缓冲区 返回字节数:文件输出流写入文件
- 反馈给客户端消息,关闭
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的更多相关文章
- java网络编程Socket通信详解
Java最初是作为网络编程语言出现的,其对网络提供了高度的支持,使得客户端和服务器的沟通变成了现实,而在网络编程中,使用最多的就是Socket.像大家熟悉的QQ.MSN都使用了Socket相关的技术. ...
- Java网络编程Socket通信
TCP(Transmission Control Protocol 传输控制协议)是一种面向连接的.可靠的.基于字节流的传输层通信协议 UDP (User Datagram Proto ...
- java网络编程socket\server\TCP笔记(转)
java网络编程socket\server\TCP笔记(转) 2012-12-14 08:30:04| 分类: Socket | 标签:java |举报|字号 订阅 1 TCP的开销 a ...
- java网络编程socket解析
转载:http://www.blogjava.net/landon/archive/2013/07/02/401137.html Java网络编程精解笔记2:Socket详解 Socket用法详解 在 ...
- Java网络编程——Socket
网络是连接不同计算机的媒介,不同的计算机依靠网络来互相通信,即传递数据. Java中与网络编程相关的部分主要是Socket(套接字),它作为一种抽象的结构,实现了与通信相关的各类方法,构成一套完整的通 ...
- Java网络编程UDP通信原理
前言 继续今天我们的Java网络编程--TCP和UDP通信 一.TCP和UDP概述 传输层通常以TCP和UDP协议来控制端点与端点的通信 TCP UDP 协议名称 传输控制协议 用户数据包协议 是 ...
- day05 Java网络编程socket 与多线程
java网络编程 java.net.Socket Socket(套接字)封装了TCP协议的通讯细节,是的我们使用它可以与服务端建立网络链接,并通过 它获取两个流(一个输入一个输出),然后使用这两个流的 ...
- JAVA网络编程Socket常见问题 【长连接专题】
一. 网络程序运行过程中的常见异常及处理 第1个异常是 java.net.BindException:Address already in use: JVM_Bind. 该异常发生在服务器端进行new ...
- UNIX网络编程——Socket通信原理和实践
我们深谙信息交流的价值,那网络中进程之间如何通信,如我们每天打开浏览器浏览网页时,浏览器的进程怎么与web服务器通信的?当你用QQ聊天时,QQ进程怎么与服务器或你好友所在的QQ进程通信?这些都得靠so ...
- java网络编程——socket实现简单的CS会话
还记得当年学计网课时用python实现一个简单的CS会话功能,这也是学习socket网络编程的第一步,现改用java重新实现,以此记录. 客户端 import java.io.*; import ja ...
随机推荐
- 输入法词库解析(五)极点码表.mb
详细代码:https://github.com/cxcn/dtool 前言 mb 是极点五笔的码表格式. 解析 偏移量 描述 0x00 版本信息 0x1B 码表介绍 0x11F 所用到的按键数 0x1 ...
- 基于 OpenTelemetry 的链路追踪
链路追踪的前世今生 分布式跟踪(也称为分布式请求跟踪)是一种用于分析和监控应用程序的方法,尤其是使用微服务架构构建的应用程序.分布式跟踪有助于精确定位故障发生的位置以及导致性能差的原因. 起源 链路追 ...
- 合理编写C++模块(.h、.cc)
模块划分 合理编写模块的 demo.h.demo.cc 下例为C++为后端服务编写的探活检测服务 health_server.h #ifndef HEALTH_SERVER_H #define HEA ...
- 通过helm搭建Harbor
文章转载自:http://www.mydlq.club/article/66/ 系统环境: kubernetes 版本:1.20.1 Traefik Ingress 版本:2.4.3 Harbor C ...
- 第一个Django应用 - 第三部分:Django视图和模板
一.概述 一个视图就是一个页面,通常提供特定的功能,使用特定的模板.例如:在一个博客应用中,你可能会看到下列视图: 博客主页:显示最新发布的一些内容 每篇博客的详细页面:博客的永久链接 基于年的博客页 ...
- 论Elasticsearch数据建模的重要性
文章转载自: https://mp.weixin.qq.com/s?__biz=MzI2NDY1MTA3OQ==&mid=2247484159&idx=1&sn=731562a ...
- Oracle基础知识汇总一
Oracle基础知识 以下内容为本人的学习笔记,如需要转载,请声明原文链接 https://www.cnblogs.com/lyh1024/p/16720759.html oracle工具: SQ ...
- C#-11 接口
一 什么是接口 接口是指定一组函数成员而不实现它们的引用类型. class Program { static void FlyFunc(IFly obj) { obj.Fly(); } static ...
- Docker | 使用dockerfile生成镜像,清理docker空间
用dockerfile生成镜像并挂载数据卷 编写dockerfile文件 创建dockerfile01 文件 # 基础镜像 FROM centos VOLUME ["volume01&quo ...
- Linx__Ubuntu_APT
apt介绍 apt是Advanced Packaging Tool的简称. 在Ubuntu下,我们可以使用apt命令进行软件包的更新,安装,删除,清理等 类似于Windows的软件管理工具. 就是Ce ...