通信协议

  即约定网络通信时的一些内容。

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.网络编程的更多相关文章

  1. 黑马程序员:Java基础总结----网络编程

    黑马程序员:Java基础总结 网络编程   ASP.Net+Android+IO开发 . .Net培训 .期待与您交流! 网络编程 网络通讯要素 . IP地址 . 网络中设备的标识 . 不易记忆,可用 ...

  2. java基础知识——网络编程、IO流

    IO流 字节流:处理字节数据的流对象,计算机中最小数据单元就是字节.InputStream OutputStream 字符流:字符编码问题,将字节流和编码表封装成对象就是字符流.Reader Writ ...

  3. 黑马程序员——JAVA基础之网络编程

    ------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 网络编程 网络模型:OSI参考模型和TCP/IP参考模型 网络通讯三要素: IP地址:InetA ...

  4. java基础篇---网络编程(TCP程序设计)

    TCP程序设计 在Java中使用Socket(即套接字)完成TCP程序的开发,使用此类可以方便的建立可靠地,双向的,持续的,点对点的通讯连接. 在Socket的程序开发中,服务器端使用serverSo ...

  5. java基础篇---网络编程(IP与URL)

    一:IP与InetAddress 在Java中支持网络通讯程序的开发,主要提供了两种通讯协议:TCP协议,UDP协议 可靠地连接传输,使用三方握手的方式完成通讯 不可靠的连接传输,传输的时候接受方不一 ...

  6. 【Java基础】网络编程

    网络编程 网络编程概述 网络编程的目的:直接或简洁地通过网络协议与其他计算机实现数据交换,进行通讯. 网络编程的两个主要问题: 如果准确地定位网络上一台或多台主机,并定位主机上的特定应用: 找到主机后 ...

  7. Java基础之网络编程

    网络编程:1.网络编程概述 (1)网络模型 OSI参考模型 TCP/IP参考模型 (2)网络通讯要素 IP地址 端口号 传输协议 (3)网络通讯前提: **找到对方IP **数据要发送到指定端口.为了 ...

  8. 黑马程序员——【Java基础】——网络编程

    ---------- android培训.java培训.期待与您交流! ---------- 一.网络模型概述 网络模型示意图: 说明: (1)数据的传输:在用户端,应用层的数据,经过层层封包,最后到 ...

  9. java基础:网络编程TCP,URL

    获取域名的两种方法: package com.lanqiao.java.test; import java.net.InetAddress;import java.net.UnknownHostExc ...

  10. java基础篇---网络编程(UDP程序设计)

    UDP程序设计 在TCP的索引操作都必须建立可靠地连接,这样一来肯定会浪费大量的系统性能,为了减少这种开销,在网络中又提供了另外一种传输协议---UDP,不可靠的连接,这种协议在各个聊天工具中被广泛的 ...

随机推荐

  1. JZOJ 2022.02.10【提高组】模拟总结

    \(\text{简要题解}\) \(\text{GDOI2012}\) 的题 不得不说当年的题做起来真的很不爽 整体看起来就是数据结构+博弈论+宽搜+背包dp优化 考场上 \(T1\) 十分钟解决过了 ...

  2. Linux下文件实时自动同步备份

    转载简书: https://www.jianshu.com/p/fc2f3ec661c0

  3. OS-HACKNOS-2.1

    HACKNOS: RECONFORCE (V1.1) 目录 HACKNOS: RECONFORCE (V1.1) 1 信息收集 1.1 端口扫描 1.2 ftp分析 1.3 后台目录扫描 1.2.1 ...

  4. ClickHouse(13)ClickHouse合并树MergeTree家族表引擎之CollapsingMergeTree详细解析

    目录 建表 折叠 数据 算法 资料分享 参考文章 该引擎继承于MergeTree,并在数据块合并算法中添加了折叠行的逻辑.CollapsingMergeTree会异步的删除(折叠)这些除了特定列Sig ...

  5. .gitattributes 作用详细讲解

    https://blog.csdn.net/qq_35425070/article/details/106883833 *.fbx filter=lfs diff=lfs merge=lfs -tex ...

  6. 微信小程序分享百度网盘文件的实现思路

    需求: 在小程序中点击按钮,获取百度网盘文件的下载地址. 实现思路: 1.网盘文件的下载地址,使用官方API只能自己下载,别人通过dlink无法下载,所以采用网页端生成接口. 好处是可以自定义提取码, ...

  7. 支持管道、重定向、*匹配的miniShell

    先上成果图 源代码 仅供技术点的分享,抄袭者就算了,所以main.c就不贴了 /* * split_line.c */ #include <stdio.h> #include <st ...

  8. Kubernetes持久化存储

    一.emptyDir持久化存储配置 emptyDir 的一些用途: 缓存空间,例如基于磁盘的归并排序. 为耗时较长的计算任务提供检查点,以便任务能方便地从崩溃前状态恢复执行. 在 Web 服务器容器服 ...

  9. vue中当数据改变时更新DOM

    具体场景: 当vue中使用swiper, better-scroll时候,我们需要去new Swiper,new [better-scroll]来获取实例,通常我们页面的数据都是异步获取的, 会导致我 ...

  10. pnpm 中无法使用 patch-package 打补丁

    原文:https://lwebapp.com/zh/post/pnpm-patch-package 介绍 前端开发过程中,经常会遇到第三方开源库有 BUG 的情况,通常我们有以下处理方式 自己 for ...