Java基础__05.网络编程
通信协议
即约定网络通信时的一些内容。
TCP和UDP对比
TCP:类比打电话
- 连接稳定
- 三次握手、四次挥手
- 客户端、服务端
- 传输完成、释放连接,效率低
UDP:类比发短信
- 不连接、不稳定;
- 客户端、服务端,没有明确的界限;
- 不管有没有准备好,都可以进行
TCP
客户端:
1、连接服务器,通过Socket;
2、发送消息
代码示例:
public static void main(String[] args) {
// 1、要知道服务器的IP地址,端口号
InetAddress serverIp = null;
Socket socket = null;
OutputStream os = null;
try {
serverIp = InetAddress.getByName("127.0.0.1");
int port = 9988;
// 2、创建一个Socket连接
socket = new Socket(serverIp,port);
// 3、发送消息 IO流知识
os = socket.getOutputStream();
os.write("welcome to China".getBytes()); // 转为字节
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
os.close();
} catch (IOException e) {
e.printStackTrace();
}
try {
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
服务端:
1、建立服务的端口:通过ServerSocket;
2、等待用户的连接,accept方法获取客户端的Socket;
3、接收用户的消息。
代码示例:
public static void main(String[] args) {
ByteArrayOutputStream baos = null;
InputStream inputStream = null;
Socket accept = null;
ServerSocket serverSocket = null;
try {
// 1、我需要一个地址
serverSocket = new ServerSocket(9988);
// 2、等待客户端连接
accept = serverSocket.accept();
// 3、读取客户端的消息
inputStream = accept.getInputStream();
// 管道流的形式处理
baos = new ByteArrayOutputStream();
byte[] buffer = new byte[1024];
int len;
while((len = inputStream.read(buffer)) != -1){
baos.write(buffer,0,len);
}
System.out.println(baos.toString());
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
baos.close();
} catch (IOException e) {
e.printStackTrace();
}
try {
inputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
try {
accept.close();
} catch (IOException e) {
e.printStackTrace();
}
try {
serverSocket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
除了简单的信息传递,也可以进行文件的传输,直接上代码,示例如下:
客户端:
public static void main(String[] args) throws Exception{
// 1、创建一个Socket连接
Socket socket = new Socket(InetAddress.getByName("127.0.0.1"),9988);
// 2、创建一个输出流
OutputStream os = socket.getOutputStream();
// 3、读取文件
FileInputStream fis = new FileInputStream(new File("F:/WeChatFiles/WeChat Files/All Users/abc.jpg"));
//4、写出文件
byte[] buffer = new byte[1024];
int len;
while((len = fis.read(buffer)) != -1){
os.write(buffer,0,len);
}
// 通知服务器,我已经发送完毕了
socket.shutdownOutput();
// 确定服务器接收完毕了,才能断开
InputStream ins = socket.getInputStream();
ByteArrayOutputStream baos = new ByteArrayOutputStream();
byte[] b1 = new byte[1024];
int len2;
while((len2 = ins.read(b1)) != -1){
baos.write(b1,0,len2);
}
System.out.println(baos.toString());
// 5、关闭资源
baos.close();
fis.close();
os.close();
socket.close();
}
服务端:
public static void main(String[] args) throws Exception{
// 1、创建服务
ServerSocket serverSocket = new ServerSocket(9988);
// 2、监听客户端的连接
Socket accept = serverSocket.accept();
// 3、获取输入流
InputStream is = accept.getInputStream();
// 4、文件输出
FileOutputStream fos = new FileOutputStream(new File("F:/abc.jpg"));
byte[] buffer = new byte[1024];
int len;
while((len = is.read(buffer)) != -1){
fos.write(buffer,0,len);
}
// 告诉客户端,我接收完毕了
OutputStream os = accept.getOutputStream();
os.write("我接收完毕了,你可以关了".getBytes());
// 5、关闭资源
os.close();
fos.close();
is.close();
accept.close();
serverSocket.close();
}
这样即可实现文件的传输。
UDP
...
URL
即:统一资源定位符,用以定位某一资源的位置。
格式:协议://ip:端口/项目/资源
Java基础__05.网络编程的更多相关文章
- 黑马程序员:Java基础总结----网络编程
黑马程序员:Java基础总结 网络编程 ASP.Net+Android+IO开发 . .Net培训 .期待与您交流! 网络编程 网络通讯要素 . IP地址 . 网络中设备的标识 . 不易记忆,可用 ...
- java基础知识——网络编程、IO流
IO流 字节流:处理字节数据的流对象,计算机中最小数据单元就是字节.InputStream OutputStream 字符流:字符编码问题,将字节流和编码表封装成对象就是字符流.Reader Writ ...
- 黑马程序员——JAVA基础之网络编程
------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 网络编程 网络模型:OSI参考模型和TCP/IP参考模型 网络通讯三要素: IP地址:InetA ...
- java基础篇---网络编程(TCP程序设计)
TCP程序设计 在Java中使用Socket(即套接字)完成TCP程序的开发,使用此类可以方便的建立可靠地,双向的,持续的,点对点的通讯连接. 在Socket的程序开发中,服务器端使用serverSo ...
- java基础篇---网络编程(IP与URL)
一:IP与InetAddress 在Java中支持网络通讯程序的开发,主要提供了两种通讯协议:TCP协议,UDP协议 可靠地连接传输,使用三方握手的方式完成通讯 不可靠的连接传输,传输的时候接受方不一 ...
- 【Java基础】网络编程
网络编程 网络编程概述 网络编程的目的:直接或简洁地通过网络协议与其他计算机实现数据交换,进行通讯. 网络编程的两个主要问题: 如果准确地定位网络上一台或多台主机,并定位主机上的特定应用: 找到主机后 ...
- Java基础之网络编程
网络编程:1.网络编程概述 (1)网络模型 OSI参考模型 TCP/IP参考模型 (2)网络通讯要素 IP地址 端口号 传输协议 (3)网络通讯前提: **找到对方IP **数据要发送到指定端口.为了 ...
- 黑马程序员——【Java基础】——网络编程
---------- android培训.java培训.期待与您交流! ---------- 一.网络模型概述 网络模型示意图: 说明: (1)数据的传输:在用户端,应用层的数据,经过层层封包,最后到 ...
- java基础:网络编程TCP,URL
获取域名的两种方法: package com.lanqiao.java.test; import java.net.InetAddress;import java.net.UnknownHostExc ...
- java基础篇---网络编程(UDP程序设计)
UDP程序设计 在TCP的索引操作都必须建立可靠地连接,这样一来肯定会浪费大量的系统性能,为了减少这种开销,在网络中又提供了另外一种传输协议---UDP,不可靠的连接,这种协议在各个聊天工具中被广泛的 ...
随机推荐
- [AHOI2002]黑白瓷砖
\(\text{Solution}\) 根据 \(Polya\) 定理推算 记总砖数为 \(m = \frac{n(n+1)}2\) 考虑旋转,不动点数均为为 \(2^{\frac{m+2}3}\) ...
- JZOJ 3281. 【GDOI2013】字母连接
\(\text{Solution}\) 一眼不会,限制有点多... 那就网络流 发下确实是很简单的建图 枚举起点集合 拆点后就很好满足限制了 \(\text{Code}\) #include < ...
- JZOJ 1166. 树中点对距离
题面 思路 本蒟蒻第一次学点分治,正遇模板题,留个模板代码 \(Code\) #include<cstdio> #include<algorithm> using namesp ...
- 大规模 IoT 边缘容器集群管理的几种架构-5-总结
前文回顾 大规模 IoT 边缘容器集群管理的几种架构-0-边缘容器及架构简介 大规模 IoT 边缘容器集群管理的几种架构-1-Rancher+K3s 大规模 IoT 边缘容器集群管理的几种架构-2-H ...
- Python (进阶 第二部)
目录 函数 闭包 匿名函数 迭代器 高阶函数 推导式 递归函数 函数 函数的定义: 功能( 包括一部分代码,实现某种功能,达成某个目的) 函数的特点: 函数可以反复调用 ,提高代码的复用性,提高开 ...
- 有趣的drop-shadow
如果写了好几个阴影,filter: drop-shadow(-0.5vmin 6vmin 0 var(--s2)) drop-shadow(-4.5vmin 10vmin 0 var(--v3));将 ...
- PHP面向对象(二)
构造函数 PHP 5 允行开发者在一个类中定义一个方法作为构造函数.具有构造函数的类会在每次创建新对象时先调用此方法,所以非常适合在使用对象之前做一些初始化工作. 代码如下: <?php//类的 ...
- LeetCode(Java版)
两数之和 题目描述 给定一个整数数组和一个目标值,找出数组中和为目标值的两个数. 你可以假设每个输入只对应一种答案,且同样的元素不能被重复利用. 示例: 给定 nums = [2, 7, 11, 15 ...
- centos系统时间与硬件时间不一致
centos系统时间与硬件时间设置.同步 将系统时间设置成2018年7月31日 12:00:00 date -s "07/31/18 12:00:00" hwclock -s 将 ...
- 若依gateway
1.若依后端gateway模块配置白名单 顾名思义,就是允许访问的地址.且无需登录就能访问.在ignore中设置whites,表示允许匿名访问. 2. SpringCloud Gateway网关配置( ...