Java基础之网络编程(一)
一、计算机网络介绍
是指将地理位置不同的具有独立功能的多台计算机及其外部设备,通过通信线路连接起来,在网络操作系统、网络管理软件及通信协议的管理和协调下,实现资源共享和信息传递的计算机系统。
计算机网络的分类:
网络类型的划分标准各种各样,但是从地理范围划分是一种大家都认可的通用网络划分标准。按这种标准可以把各种网络类型划分为局域网、城域网、广域网三种。
局域网(Local Area Network,LAN):一般来说只能是一个较小区域内
城域网(Wide Area Network,WAN):是不同地区的网络互联,不过在此要说明的一点就是这里的网络划分并没有严格意义上地地理范围的区分,只能是一个定性的概念。
城域网(Metropolitan Area Network,MAN):所覆盖的范围比城域网更广,它一般是在不同城市之间的LAN或者MAN网络互联,地理范围可从几百公里到几千公里,Internet就是一种广域网。
网络参考模型:
二、TCP/IP协议
TCP/IP协议不是TCP和IP这两个协议的合称,而是指因特网整个TCP/IP协议族;
在TCP/IP协议中,最重要的协议是TCP、UDP、IP协议。
TCP协议(Transmission Control Protocl)
TCP是基于面向连接的协议,也就是说,在正式收发数据前,必须和对方建立可靠的连接。
TCP协议建立连接前需要三次会话(握手)
A->B
B->A
A->B
特点:
1、面向连接;
2、安全,可靠;
3、效率相对较低;
4、数据大小无限制;
UDP协议(User Datagram Protocol)
UDP是面向无连接的通讯协议,UDP数据包括目的端口号和源端口号信息,由于通讯不需要连接,所以可实现广播发送。
UDP通讯时不需要接收方确认,属于不可靠的传输,可能会出现丢包现象,实际应用中要求程序员验证
特点:
1、无连接;
2、可靠性不高;
3、效率高;
4、每次最大传输64KB
IP协议
IP的责任就是把数据从源传送到目的地。它不负责保证数据传送可靠性,流控制,包顺序和其它对于主机到主机协议来说很普通的服务。
IP协议中还有一个非常重要的内容分,那就是给因特网上的每台计算机和其他设备都规定了一个唯一的地址,叫做“IP地址”。
IP地址(Internet Protocol)
唯一标识网络上的每一台计算机
IP地址的组成
32位,为4个8位的二进制组成。
IP地址的组成
IP地址 = 网络地址 + 主机地址
网络地址:标识计算机或网络设备所在的网段
主机地址:标识特定主机或网络设备
IP地址的配置和检测
配置IP地址,检测网络是否畅通
查看本机的IP地址:ipconfig
测试网络:ping 目标IP地址
端口号
端口号:具有网络功能的应用软件的标识号
端口是一个软件结构,被客户程序或服务程序用来发送和接收数据,一台服务器有256*256个端口。
0-1023是公认端口号,即已经公认定义或为将要公认定义的软件保留的
1024-65535是并没有公共定义的端口号,用户可以自己定义这些端口的作用。
端口与协议有关:TCP和UDP的端口互不相干
网络服务器
通常指在网络环境下,具有较高计算能力,能够提供用户特殊服务功能的计算机。
三、Socket介绍
通信链路的端点被称为“套接字”(Socket),是提供给应用程序的接口
Socket(套接字)
1、两个应用程序可以通过一个双向的网络通信连接实现数据交换,这个双向链路的一端称为一个Socket。
2、Socket可以看成在两个程序进行通讯连接中的一个端点,一个程序将一段信息写入Socket中,该Socket将这段信息发送给另一个Socket,使这段信息能传送到其他程序中。
3、Socket通常用来实现Client-Server(客户端-服务端)连接,建立连接时所需要的寻址信息为远程计算机的IP地址和端口号(Port Number)
网络编程的四个基本步骤
1、创建Socket;
2、打开连接到socket的输入/输出流(通过Socket的getInputStream()和getOutputStream());
3、按照一定的协议对socket进行读/写操作;
4、关闭Socket.
Socket在应用程序中创建,通过一种绑定机制与驱动程序建立关系,告诉自己对应的IP地址和端口号,此后,应用程序传送
给Socket的数据由Socket交给驱动程序向网络上发送出去。计算机从网络上收到与该Socket绑定的IP与端口号相关的数据后,由
驱动程序交给Socket,应用程序便可以从该Socket中提取接收到的数据。
基于TCP协议的Socket编程
基于TCP协议的Socket网络通信
1、用来实现双向安全连接的网络通信
2、TCP Socket通常用来实现Client-Server连接,建立连接时所需要的寻址信息为远程计算机的IP地址和端口号
TCP Socket通信模型
进行网络通信时,Socket需要借助数据流来完成数据的传递工作
Socket编程实例:
package hello;import java.io.*;
import java.net.*;public class Server {public static void main(String[] args) {ServerSocket serverSocket = null;Socket socket = null;OutputStream out = null;try {//创建服务器的ServerSocket,指定端口号为8000serverSocket = new ServerSocket(8000);System.out.println("服务器等待连接...");//监听客户端的连接,连接之前一直阻塞socket = serverSocket.accept();//获取该Socket的输出流,该输出流用来向与它通信的客户端写入out = socket.getOutputStream();out.write("hello,欢迎学习Socket编程!".getBytes());System.out.println("发送成功!");} catch (IOException e) {e.printStackTrace();} finally {try {socket.close();serverSocket.close();} catch (IOException e) {e.printStackTrace();}}}}
package hello;import java.io.*;
import java.net.*;public class Client {public static void main(String[] args) {Socket socket = null;InputStream input = null;try {//创建客户端的Socketsocket = new Socket("localhost",8000);//获取该Socket的输入流,这个输入流用来读取服务器生成的那个Socket发来的消息input = socket.getInputStream();byte[] b = new byte[1024];int len = input.read(b);System.out.println("客户端读取的信息是:" + new String(b,0,len));} catch (Exception e) {e.printStackTrace();} finally {try {socket.close();} catch (IOException e) {e.printStackTrace();}}}}
运行结果:服务器等待连接时:
客户端接收到的信息:
服务端的反馈:
使用线程的Socket实例:
package echo;import java.io.*;
import java.net.*;public class Server {public static void main(String[] args) {ServerSocket server = null;Socket socket = null;try {server = new ServerSocket(8000);int count = 0;boolean flag = true;while(flag){count++;System.out.println("服务器(大山)等待第" + count + "位连接...");socket = server.accept();//连接之前一直阻塞new Thread(new EchoRunnable(socket)).start();}} catch (IOException e) {e.printStackTrace();}}}
package echo;import java.io.*;
import java.net.*;public class EchoRunnable implements Runnable {private Socket socket;public EchoRunnable(Socket socket) {this.socket = socket;}@Overridepublic void run() {try {BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));PrintStream ps = new PrintStream(socket.getOutputStream());//与客户端不断的交互,知道收到一个"bye",退出与当前客户端的交互while(true) {//接收客户端发送来的信息String receive = br.readLine();ps.println("echo:" + receive);//向客户端发送信息if("bye".equals(receive)) {socket.close();break;}}} catch (IOException e) {e.printStackTrace();}}}
package echo;import java.io.*;
import java.net.*;public class Client {public static void main(String[] args) {//接收键盘的输入BufferedReader keyBr = new BufferedReader(new InputStreamReader(System.in));Socket socket = null;try {socket = new Socket("localhost",8000);//用力读取服务端信息BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));//用来向服务端发送消息PrintStream ps = new PrintStream(socket.getOutputStream());while(true) {System.out.println("请输入:");//接收键盘输入,输入完成之前一直阻塞String keyInput = keyBr.readLine();ps.println(keyInput);//发送消息到服务端//接收服务端发来的消息String receive = br.readLine();System.out.println(receive);if("bye".equals(keyInput)) {socket.close();break;}}} catch (IOException e) {e.printStackTrace();}}}
运行结果:
Java基础之网络编程(一)相关推荐
- JAVA基础11 网络编程
JAVA基础 11.网络编程 1.什么是网络?网络模型?网络四要素? 1.网络 在计算机领域中网络是信息传输,接收,共享的虚拟平台,通过它把各个点,面,体的联系到一起,从而实现这些资源的共享. 资源的 ...
- Java基础:网络编程
1. 网络编程概述 自从互联网诞生以来,现在基本上所有的程序都是网络程序,很少有单机版的程序了. 计算机网络就是把各个计算机连接到一起,让网络中的计算机可以互相通信.网络编程就是如何在程序中实现两台计 ...
- java基础:网络编程(一)简介
网络编程简介 这些知识点在学习计算机网络时都有详细讲,我这就简单介绍下,具体的看计算机网络相关知识. 1.软件结构 常见的软件结构有C/S和B/S C/S (Client/Server) 表示客户端/ ...
- Java基础6网络编程
12.1 基本概念 如今,计算机已经成为人们学习.工作.生活必不可少的工具.我们利用计算机可以和亲朋好友网上聊天,也可以玩网游.发邮件等等,这些功能实现都离不开计算机网络.计算机网络实现了不同计算机之 ...
- java基础篇---网络编程(IP与URL)
一:IP与InetAddress 在Java中支持网络通讯程序的开发,主要提供了两种通讯协议:TCP协议,UDP协议 可靠地连接传输,使用三方握手的方式完成通讯 不可靠的连接传输,传输的时候接受方不一 ...
- Java基础之网络编程
网络编程 1.1 网络编程的基本概念 1.网络 将不同区域的电脑连接到一起,组成局域网.城域网或广域网.把分布在不同地理区域的计算机与专门的外部设备用通信线路互联成一个规模大.功能强的网络系统,从而使 ...
- Java基础23 网络编程 socket套接字流 TCP传输总结
一.网络编程的概念 1.计算机网络:将不同地区的计算机,使用网络来进行连接 实现不同地区的数据的交互与共享(互联时代) 2. 网络编程的三要素:IP地址 端口号 协议 3. ip地址:是在网络连接中 ...
- 大数据 -- java基础16 网络编程 TCP UDP
1.网络编程的三要素:(1)IP地址(2)端口号(3)协议 2.IP地址 : 网络中计算机唯一标识. (1)IP地址在计算机中存储的时候是由二进制的形式进行存储的:IP:192.168.7.42 十进 ...
- Java基础进阶网络编程概述
一.网络编程中有两个主要的问题: 1.如何准确地定位网络上一台或多台主机:定位主机上的特定的应用 2.找到主机后如何可靠高效地进行数据传输 二.网络编程中的两个要素: 1.对应问题一:IP和端口号 2 ...
- Java 基础之网络编程
网络编程 主要内容 软件架构CS/BS 网络通信三要素 TCP通信 Socket套接字 ServerSocket 第一章 网络编程入门 1.1软件结构 C/S结构 :全称为Client/Server结 ...
最新文章
- linux学习笔记(软件包管理)
- 每日一皮:宿舍阿姨眼中的单身狗...
- webpack对icon-font图片的处理
- .NET框架类库中的命名空间
- cap理论具体含义_架构设计之「 CAP 定理 」
- 河北省计算机2018单招试题答案,2018年河北省普通高职单招考试十类和高职单招对口电子电工类、计算机类联考命题、考试与评卷...
- 优酷的多页画在同一窗口打开效果。
- mysqlin索引失效的情况
- .net session 有效时间_【面试题】|干货!.NET C# 简答题Part 07
- 【已解决】双系统 ubuntu wifi 图标消失,无法连接无线网,查询无线网卡型号安装驱动(含网络备用方案)
- 导出文件:使用lowagie.itext导出数据为Word文件
- 2021 年使用人数最多的5款主流前端框架点评
- FAT 32 文件系统学习
- 构建CA证书详解过程步骤
- 《那些年啊,那些事——一个程序员的奋斗史》——98
- linux 添加快捷命令,linux 添加快捷指令
- 【数据分析案例】使用机器学习做游戏留存数据挖掘的一种尝试
- cocosCreator日历插件
- iphone绕ID激活并完美重启
- python解析pcap提取{src ip,src port,protocol,dst ip, dst port}五元组,再提取网络流(包括前向流与后向流)
热门文章
- 网络安全---OSPF协议
- 平行网页寻源(第二篇)
- go-pitaya学习笔记(11) - 测试集群rpc
- iText的使用(1)-- 组合图片生成PDF
- CTA策略你知道多少
- 如何使用 Python 爬取微信公众号文章
- 发挥大数据价值 精准用户画像如何练成
- E.03.11 A Tale Old and New as Another Royal Wife Breaks Free
- 【LeetCode】713. Subarray Product Less Than K 乘积小于 K 的子数组
- linux i2c detect函数,手把手教你写Linux I2C设备驱动