通信协议

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

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 3736. 【NOI2014模拟7.11】数学题

    \(\text{Problem}\) 给出向量 \(\boldsymbol a = (x1,y1), \boldsymbol b = (x2,y2)\) 求 \(|\lambda_1\boldsymb ...

  2. JZOJ 2020.02.01【NOIP提高组】模拟A 组

    2020.02.01[NOIP提高组]模拟A 组 二月份第一场比赛 闲话 惨烈啊! 50+30+0=80分 一题都没A 唉 最高150? \(zzh\) 暴虐A组 总结: 若干新东西 \(T1\) 我 ...

  3. Where do I Turn?(叉积)

    题目: Trouble came from the overseas lands: a three-headed dragon Gorynych arrived. The dragon settled ...

  4. MySQ安装装

    1.Linux安装 检查系统有没有之前安装过: rpm -qa | grep mysql 如果安装过卸载 rpm -e mysql // 普通删除模式 rpm -e --nodeps mysql // ...

  5. 爬虫下载rockchip的规格书

    #file-name: pdf_download.py import os import requests from bs4 import BeautifulSoup def download_fil ...

  6. centos7无法下载nginx

    centos7无法下载nginx   1.正常情况下:先下载epel-release 源然后安装yum install -y nginx2.如果不行,试着执行yum clean all &&a ...

  7. redis运维与管理

    redis内存存储,速度极快 丰富的附件功能 1.持久化功能:降存储在内存的数据保存到硬盘 2.发布与订阅:将消息同时分发给多个客户端 3.过期键功能:为键设置一个过期时间,让它在指定的时间之后自动被 ...

  8. TensorFlow中的Variable 变量

    简单运用 这节课我们学习如何在 Tensorflow 中使用 Variable . 在 Tensorflow 中,定义了某字符串是变量,它才是变量,这一点是与 Python 所不同的. 定义语法: s ...

  9. 狂神--Docker

    官网地址 官网 https://www.docker.com/ 官方文档Docker文档是超详细的 https://docs.docker.com/ 仓库地址 https://hub.docker.c ...

  10. GitHub访问缓慢

    参考:https://www.cnblogs.com/liuchao888/p/11733996.html