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,不可靠的连接,这种协议在各个聊天工具中被广泛的 ...
随机推荐
- MySQL创建表的三种方式
创建表的三种方式 通过create语句直接创建 语法: create [TEMPORARY] table [IF NOT EXISTS] table_name ( col_name column_de ...
- 跳板攻击之: MSF 添加路由方式渗透内网
跳板攻击之: MSF 添加路由方式渗透内网 目录 跳板攻击之: MSF 添加路由方式渗透内网 1 Metasploit 跳板攻击: 添加路由方式原理 2 实验环境 2.1 建立 meterpreter ...
- CCRD_TOC_2015_EULAR专刊第二辑
中信国健风湿免疫临床通讯 EULAR2015专刊第2辑●目录 类风湿关节炎专题 ■ RA放射学进展的预测 OP0070 滑膜HIF-1a与RA关节破坏 THU0085 24周SDAI缓解能否预测R ...
- MRI病变能否预测已获临床缓解的早期RA未来放射学进展
MRI病变能否预测已获临床缓解的早期RA未来放射学进展 Tamai M, et al. EULAR 2015. Present ID: FRI0048. 原文 译文 FRI0048 MRI BONE ...
- 地理探测器简介(R语言)
地理探测器 1. 地理探测器原理 空间分异性是地理现象的基本特点之一.地理探测器是探测和利用空间分异性的工具.地理探测器包括4个探测器. 分异及因子探测:探测Y的空间分异性:以及探测某因子X多大程度上 ...
- 一文搞懂│http 和 https 的通信过程及区别
目录 两者的区别 HTTP的通信过程 HTTPS的通信过程 两者的区别 端口: http 端口号是80,https 端口号是443 传输协议: http 是超文本传输协议,属于明文传输:https 是 ...
- Vue mixin混入的介绍
功能:可以把多个组件共用的配置提取成一个混入对象 使用方式: 1.第一步:定义混合,例如: 2.第二步:使用混合(全局混合和局部混合) (1)局部混合 mixins:['XXX'] (2)全局混合 V ...
- APP压力稳定性测试-Monkey
一.Monkey工具简介 1.monkey的来源: Monkey是一个命令行工具,使用安卓调试桥(adb)来运行它,模拟用户:触摸屏幕.滑动Trackball.按键等随机事件流来对设备上的程序进行压力 ...
- mybatis动态标签——foreach批量添加和删除
<!-- [foreach标签] collection:设置要循环的数组或集合 item:用一个字符串表示数组或集合中的每一个数据 separator:设置每次循环的数据之间的分隔符 open: ...
- Win10 笔记本禁用/启用自带键盘
文章来源:华硕笔记本怎么禁用自带键盘_虽千万里,吾往矣!的博客-CSDN博客_华硕笔记本怎么禁用自带键盘 在小娜搜索栏中输入cmd,找到命令提示符(cmd),并且右键以管理员身份运行. 在弹出的窗口中 ...