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,不可靠的连接,这种协议在各个聊天工具中被广泛的 ...
随机推荐
- JZOJ 5350. 【NOIP2017提高A组模拟9.7】陶陶摘苹果
题目 分析 很神奇的事情又发生了!! 很容易想到设 \(f_{i,j}\) 表示考虑前 \(i\) 个区间,已选 \(j\) 个区间且必选第 \(i\) 时能覆盖到的最多苹果数 转移 \(O(n)\) ...
- 免杀之:Mimikatz 免杀过杀软,思路学习
免杀之:Mimikatz 免杀过杀软 目录 免杀之:Mimikatz 免杀过杀软 1 环境准备 2 处理过程 2.1 生成原始的Mimikatz程序 2.2 定位到代码或字符串上特征绕过 2.3 定位 ...
- 代码随想录算法训练营day04 | leetcode
基础知识 记录一下栈实现及操作 public class ArrayDequeStack { public void main() { ArrayDeque stack = new ArrayDequ ...
- python之定时任务APScheduler
一.APScheduler APScheduler全称Advanced Python Scheduler 作用为在指定的时间规则执行指定的作业. 指定时间规则的方式可以是间隔多久执行,可以是指定日期时 ...
- ol序号并在序号加背景色
<style type="text/css"> .list {list-style-type: none;margin: 0;padding: 0 0 0 30px;} ...
- Ubuntu命令安装默认支持的Qt5版本
1.前置依赖 sudo apt install build-essential sudo apt install cmake 2.只安装默认的Qt模块 # 安装默认SDK # Ubuntu18.04中 ...
- C#导出Excel设置单元格样式
C# 导出Excel 1 //导出Excel 2 private void ExportExcel(string fileName, System.Data.DataTable myDGV, stri ...
- git提交到代码到远程仓库,合并分支提示entirely different commit histories(备忘)
最近提交代码到github,合并分支的时候提示"master and main are entirely different commit histories" master为本地 ...
- 复习第6点-6.SpringMVC作用域传值
作用域范围 对象名称 作用范围 application 整个作用范围 session 在当前会话中有效 request 在当前请求中有效 page 在当前页面有效 request/session/ap ...
- vi 自增
(1). 建立第一个列表项.确保它以数字开始.(2). qa - 用寄存器 'a' 开始记录(3). Y - 抽出这个列表项(4). p - 把该项的一个副本放置在下一行上(5). CTRL-A - ...