1、网络模型

OSI参考模型:应用层 表示层 会话层 传输层 网络层 数据链路层 物理层

TCP/IP参考模型:应用层 传输层 网际层            主机至网络层

OSI七层简述:

物理层:主要定义物理设备标准,如网线接口类型、光纤接口类型、各种传输介质的传输速率等等

。主要作用是传输比特流(将1、0转换为电流强弱)

数据链路层:主要是将从物理层接收到的数据进行MAC地址的封装和解封装。这一层工作的

设备是交换机

网络层:主要将从下层接收到的数据进行ip地址的封装和解封装。这一层的主要设备是路由器。

路由器进行数据包传播方向的定义

传输层:定义了一些传输数据的协议和端口号(TCP/UDP)

会话层:通过传输层建立数据传输的通路

表示层:对接受数据进行解释、加密和解密、压缩和解压缩

应用层:主要对应计算机的应用软件,即终端应用

2、网络通讯要素

IP地址

(1)网络中的设备的标识

(2)不易记忆,可用主机名

(3)本地回环地址:127.0.0.1 主机名:localhost

端口号

(1)用于标识进程的逻辑地址,不同进程的标识

(2)有效端口:0~65535,其中0~1024是系统使用或保留端口

传输协议

(1)通讯规则

(2)常见协议:TCP  UDP

3、TCP与UDP协议的区别

TCP:传输控制协议      打电话、下载数据、

(1)建立连接,形成传输数据通道

(2)在连接中进行大量数据传输

(3)通过三次握手完成连接,是可靠协议(a:哥们你在吗?b:我在。a:好,我知道你在了。)

(4)必须建立连接,效率会稍低

UDP:              对讲机 QQ聊天 在线视频聊天 以速度快为主,不可靠,对方可能不在线

(1)将数据及源和目的封装成数据包,不需要建立连接

(2)每个数据包的大小限制在64k内

(3)因无连接,是不可靠协议

(4)不需要建立连接,速度快

4、什么是socket

Socket(套接字)

(1)Socket就是为网络服务提供的一种机制

(2)通信的两端都有Socket

(3)网络通信其实就是Socket间的通信

(4)数据在两个Socket间通过IO传输

下面使用java进行简单的socket通信,通信协议分为TCP和UDP

java中使用udp进行数据发送,用到的api主要是java.net包下的,代码示例如下:

发送端代码:

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.Inet6Address;public class UDPSendDemo {/** 创建UDP传输的发送端。 思路: (1)建立UDP的socket服务 * (2)将要发送的数据封装到数据包中* (3)通过UDP的socket服务将数据包发送出去 * (4)关闭socket服务*/public static void main(String[] args) throws IOException {System.out.println("发送端启动......");//启动socket服务DatagramSocket socket = new DatagramSocket();//需要发送的数据String str = "你是**?";byte[] bt = str.getBytes();//需要发送的数据包,里面封装了数据内容、数据大小、目的地ip地址、目的地应用程序的端口号DatagramPacket dp = new DatagramPacket(bt, bt.length,Inet6Address.getByName("fe80::c93c:a4cb:e167:cb7e%14"), 10000);System.out.println(dp.getAddress().getHostAddress());//发送数据包socket.send(dp);//关闭socket服务socket.close();}
}


接收端代码:

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;public class UDPReceiveDemo {/** 建立UDP接收端的思路: * (1)建立UDP socket服务 * (2)创建数据包,用于存储接收到的数据,方便用数包对象的方法解析这些数据* (3)使用socket服务的receive方法将接收到的数据存储到数据包中* (4)通过数据包的方法解析数据包中的数据 (5)关闭资源*/public static void main(String[] args) throws IOException {System.out.println("接收端启动......");//创建socket服务并设置端口号DatagramSocket socket = new DatagramSocket(10000);//创建一个数据包勇于接收数据byte[] buf = new byte[1024];DatagramPacket dp = new DatagramPacket(buf, buf.length);//接收socket.receive(dp);//解析出数据包中的内容并打印出来String text = new String(dp.getData(), 0, dp.getLength());int port = dp.getPort();String ip = dp.getAddress().getHostAddress();System.out.println(ip + ":" + port + "说:" + text);//关闭socket服务socket.close();}
}

java中使用udp进行数据发送,用到的api主要是java.net包下的,代码示例如下:

服务端代码:

import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;public class TCPServerDemo {/** TCP传输创建服务端: * 1、创建TCP服务端socket服务。使用ServerSocket对象 * 2、服务端必须对外提供一个端口,否则客户端无法连接* 3、获取链接过来的客户端对象 * 4、通过客户端对象获取socket流读取客户端发来的数据,并打印出来 * 5、关闭资源(关闭客户端,关闭服务端)*/public static void main(String[] args) throws Exception {//创建服务端socket对象ServerSocket serverSocket = new ServerSocket(10000);//得到连进来的客户端的对象Socket socket = serverSocket.accept();//获取该客户端对象的输入流,读取客户端发来的数据InputStream in = socket.getInputStream();byte[] buf = new byte[1024];int len = in.read(buf);String text = new String(buf, 0, len);System.out.println(socket.getInetAddress().getHostAddress() + "说:" + text);//关闭资源,注意此处要先关闭客户端socket.close();serverSocket.close();}
}

客户端代码:

import java.io.IOException;
import java.io.OutputStream;
import java.net.Inet6Address;
import java.net.InetAddress;
import java.net.Socket;
import java.net.UnknownHostException;public class TCPClientDemo {/** TCP传输创建客户端:* 1、创建TCP客户端socket服务。使用的是socket对象。建议该对象一创建就明确 目的地。即要连接的主机* 2、如果连接建立成功,说明数据传输通道已经建立。该通道就是socket流,是底层建立好的* 。既然是流说明这里既有输入又有输出。想要输入或者输出流对象,可以找socket来获取。可以通过* getOutputStream()和getInputStream()来获取两个字节流 * 3、使用输出流将数据写出*/public static void main(String[] args) throws UnknownHostException, IOException {//创建socket对象,封装目的地ip和端口Socket socket = new Socket(Inet6Address.getByName("fe80::c93c:a4cb:e167:cb7e%14"), 10000);//获取该socket对象的输出流,进行数据写入,注意只能是字节流OutputStream out = socket.getOutputStream();out.write("你是**?".getBytes());//关闭资源socket.close();}
}

转载于:https://blog.51cto.com/12222886/2067392

Java网络编程----基础相关推荐

  1. 迈入JavaWeb第一步,Java网络编程基础,TCP网络编程URL网络编程等

    文章目录 网络编程概述 网络通信要素 要素一IP和端口号 要素二网络协议 TCP网络编程 UDP网络编程 URL网络编程 Java网络编程基础 网络编程概述 Java是Internet上的语言,它从语 ...

  2. Java网络编程和NIO详解开篇:Java网络编程基础

    老曹眼中的网络编程基础 转自:https://mp.weixin.qq.com/s/XXMz5uAFSsPdg38bth2jAA 我们是幸运的,因为我们拥有网络.网络是一个神奇的东西,它改变了你和我的 ...

  3. Java 网络编程基础知识

    Java 网络编程基础知识 基础概念 计算机网络的基本概念 ​ 网络:多台计算机使用网络设备互联在一起,计算机之间可以进行通信,这样就组成了一个计算机网络. ​ 网络设备:集线器(HUB),路由器,交 ...

  4. Java网络编程基础_Java网络编程基础篇

    一.前言 网络通讯在系统交互中是必不可少的一部分,无论是面试还是工作中都是绕不过去的一部分,本节我们来谈谈Java网络编程中的一些知识,本chat内容如下: 网络通讯基础知识,剖析网络通讯的本质和需要 ...

  5. Java网络编程基础学习

    网络编程 1. 计算机网络 是指将地理位置不同的具有独立功能的多台计算机及其外部设备**,**通过通信线路连接起来,在网络操作系统,网络管理软件及网络通信协议的管理和协调下,实现资源共享和信息传递的计 ...

  6. 【Java——网络编程基础之客户端服务器连接】

    网络编程 1.1软件结构 1.2 网络通信协议 1.3 协议分类 1.4网络编程三要素 协议 IP地址 端口号 TCP通信程序 2.1 概述 2.2 Socket类 构造方法 成员方法 2.3 Ser ...

  7. JAVA 网络编程基础

    一,前言 了解计算机网络的概述,掌握Sokcet类编程,ServerSocket类,Socket类的构造方法和常用方法 二,计算机网咯 1.概述 计算机网络计算机们组成的网络,同一个网络中,计算机可以 ...

  8. Java网络编程基础(七)— RMI分布式网络编程

    Java RMI指的是远程方法调用(Remote Method Invocation).它是一种机制,能够让在某个机器上的Java程序调用另一个机器上的Java程序的方法,用此方法调用的任何对象必须实 ...

  9. java网络编程基础(知识+代码示例)

    目录 网络的相关概念 常用类 InetAddress类 Socket类 TCP字符流编程简单样例 TCP字节流编程简单样例 UDP字节流编程简单样例 小知识点 网络的相关概念 网络:两台或多台设备通过 ...

  10. 一、Java网络编程基础

    1.计算机网络体系结构 1.1 OSI七层模型 开放系统互连参考模型 (Open System Interconnect 简称OSI)是国际标准化组织(ISO)和国际电报电话咨询委员会(CCITT)联 ...

最新文章

  1. AI大牛李沐的《工作五年反思》火了,网友:再一次impress了我
  2. 递归实现显示目标文件夹的所有文件和文件夹,并计算目标文件夹的大小
  3. Linux下connect超时处理
  4. 【Linux】一步一步学Linux——halt命令(196)
  5. [安卓] 9、线程、VIEW、消息实现从TCP服务器获取数据动态加载显示
  6. Linux 源码编译安装过程-以安装XZ解压为例
  7. go语言调用c指针接口,GoLang之调用C接口的使用方法
  8. github下载慢怎么办,国内下载release内容的解决办法
  9. 今天谈谈COLING2018计算语言学进展
  10. LinkedHashMap与HashMap的使用比较
  11. AIX系统修改用户密码依然无法登录
  12. 解决extremeComponents中文按拼音排序问题
  13. c语言二进制转十六进制代码,C语言--二进制转十六进制
  14. python调用m文件
  15. Photoshop CC2018软件
  16. 修改游戏存档之植物大战僵尸
  17. 关于文案排版的一些基本技巧
  18. python win32api键盘_pythonwin32api键盘输入教程
  19. win10安装Microsoft Office 2016(64位)提示已安装Microsoft Office 2016(32位)
  20. 【JavaMap接口】HashMap源码解读实例

热门文章

  1. 商务搜索引擎_网络营销外包——网络营销外包公司如何做好电子商务网站优化?...
  2. linux安装mysql5.6整套_Linux安装Mysql5.6
  3. k均值例子 数据挖掘_【十大经典数据挖掘算法】k-means
  4. idea redis 插件_Intellij IDEA 实用插件安利
  5. linux ssh非交互脚本,sshpass-Linux命令之非交互SSH
  6. 基于python的分类模型_python SVM 线性分类模型的实现
  7. unicode 转换
  8. 经典解释监视器和对象锁
  9. npm run build失败
  10. wps中,点空格或者enter之后首字母变大写问题