目录:
1.软件结构
2. 网络编程三要素
3. TCP通信程序(Socket和ServerSocket)

1.软件结构

1.C/S结构:全称是Client/Server结构,是指客户端和服务器结构如QQ微信等

2.B/S全称Browser/Server,是指浏览器和服务器结构,常见谷歌火狐等

网络编程,就是在一定的协议下,实现两台计算机 的通信的程序

2.网络编程三要素

1.网络通信协议
2.IP地址
3.端口号

2.1.协议

1.网络通信协议:通信协议是对计算机必须遵守的规则,只有遵守这些规则,计算机之间才能进行通信。这就 好比在道路中行驶的汽车一定要遵守交通规则一样,协议中对数据的传输格式、传输速率、传输步骤等做了 统一规定,通信双方必须同时遵守,最终完成数据交换。这里协议也分为两种:
2.TCP/IP协议:传输控制协议/因特网互联协议( Transmission Control Protocol/Internet Protocol),是 Internet最基本、最广泛的协议。它定义了计算机如何连入因特网,以及数据如何在它们之间传输的标准。它 的内部包含一系列的用于处理数据通信的协议,并采用了4层的分层模型,每一层都呼叫它的下一层所提供的 协议来完成自己的需求。如下图:

3.网络通信协议的分类

1.TCP协议
传输控制协议 (Transmission Control Protocol)。TCP协议是面向连接的通信协议,即传输数据之前, 在发送端和接收端建立逻辑连接,然后再传输数据,它提供了两台计算机之间可靠无差错的数据传输。 三次握手:TCP协议中,在发送数据的准备阶段,客户端与服务器之间的三次交互,以保证连接的可 靠。 第一次握手,客户端向服务器端发出连接请求,等待服务器确认。 第二次握手,服务器端向客户端回送一个响应,通知客户端收到了连接请求。 第三次握手,客户端再次向服务器端发送确认信息,确认连接。整个交互过程如下图所示。
完成三次握手,连接建立后,客户端和服务器就可以开始进行数据传输了。由于这种面向连接的

  • 第一次握手,客户端向服务器端发出连接请求,等待服务器确认。
  • 第二次握手,服务器端向客户端回送一个响应,通知客户端收到了连接请求。
  • 第三次握手,客户端再次向服务器端发送确认信息,确认连接。

三次握手如图:

完成三次握手,连接建立后,客户端和服务器就可以开始进行数据传输了。由于这种面向连接的特性,TCP协议可 以保证传输数据的安全,所以应用十分广泛,例如下载文件、浏览网页等
2.UDP协议
用户数据报协议(User Datagram Protocol)。UDP协议是一个面向无连接的协议。传输数据时,不需 要建立连接,不管对方端服务是否启动,直接将数据、数据源和目的地都封装在数据包中,直接发送。每个 数据包的大小限制在64k以内。它是不可靠协议,因为无连接,所以传输速度快,但是容易丢失数据。日常应 用中,例如视频会议、QQ聊天等。

2.2.IP地址

1.IP地址指互联网协议地址(Internet Protocol Address),俗称IP。IP地址用来给一个网络中的计算机设 备做唯一的编号。我们的计算机想要连接到互联网上的计算机就要通过IP地址(就像你想打电话给你妈,你自身相当于一台计算机,电话号码相当于IP地址,你妈相当于互联网上的计算机)

2.IP地址的分类:

1.IPv4:是一个32位的二进制数,通常被分为4个字节,表示成 a.b.c.d 的形式,例如 192.168.65.100 。其 中a、b、c、d都是0~255之间的十进制整数,那么最多可以表示42亿个。
2.IPv6:由于互联网的蓬勃发展,IP地址的需求量愈来愈大,但是网络地址资源有限,使得IP的分配越发紧张。 有资料显示,全球IPv4地址在2011年2月分配完毕。 为了扩大地址空间,拟通过IPv6重新定义地址空间,采用128位地址长度,每16个字节一组,分成8组十六进 制数,表示成ABCD:EF01:2345:6789:ABCD:EF01:2345:6789,号称可以为全世界的每一粒沙子编上一个网 址,这样就解决了网络地址资源数量不够的问题。

那么我们在我们windows操作系统上可以查看我们的端口号:
指令:

ipconfig

查看本台计算机和指定IP地址的计算机之间是否可以正常地通信

ping 空格 IP地址

有两个特殊的IP地址:

(1)127.0.0.1:代表自己电脑的IP地址
(2)localhost:也代表本地的IP地址

2.3.端口号

1.端口号是干嘛的?
我们知道我们通过IP地址可以建立两台计算机之间的连接,但是比如我们在使用QQ的时候我们给朋友发送一条信息,那么计算机怎么知道我这条信息是要发送到朋友的QQ上而不是朋友的微信上,这时候就需要我们的端口号了

2.端口号是啥?
端口号是一个逻辑端口,我们无法看到或者直接使用,我们的一些网络软件(QQ微信等等)一打开系统就会为网络分配一个随机的端口号或者在软件打开的时候向系统要指定的端口号

3.来个端口号高大上的定义:

端口号是可以唯一标识设备中的进程(应用程序)

4.端口号的表示:

端口号:用两个字节表示的整数,它的取值范围是0~ 65535。其中,0~1023之间的端口号用于一些知名的网 络服务和应用,普通的应用程序需要使用1024以上的端口号。如果端口号被另外一个服务或应用所占用,会 导致当前程序启动失败。

5.端口号的注意点:

  • 1.端口号为1024前的我们不能是使用,系统已经分配给已知的网络软件
  • 2.网络的端口号不能重复
  • 3.我们一些软件的指定端口号如:mysql为3306,oracle1521等等

利用 协议 + IP地址 + 端口号 三元组合,就可以标识网络中的进程了,那么进程间的通信就可以利用这个标识与其 它进程进行交互。

3. TCP通信程序

3.1通信程序的概述

1.TCP通信能实现两台计算机之间的数据交互,通信的两端,要严格区分为客户端与服务端

2.两端通信时步骤:

  1. 服务端程序,需要事先启动,等待客户端的连接。
  2. 客户端主动连接服务器端,连接成功才能通信。服务端不可以主动连接客户端

客户端和服务器端建立逻辑连接后这个连接中包含一个对象,就是一个I/O流对象,客户端和服务器端可以使用I/O对象进行数据在两者之间的传输,由于数据不仅仅是字符,所以I/O对象是字节流


这里有两个注意点

1.多个客户端同时和服务器进行交互,服务器必须明确和哪一个客户端进行交互在服务器端有一个方法叫accept客户端获取到请求的客户端对象
2.多个客户端同时和服务器进行交互,就需要使用多个I/O流对象
3.服务器是没有I/O流对象的,服务器可以获取到请求的客户端对象Socket(下面会讲)使用每个客户端Socket中提供的I/O流对象和客户端进行交互

3.在Java中,提供了两个类用于实现TCP通信程序:

  1. 客户端: java.net.Socket 类表示。创建 Socket 对象,向服务端发出连接请求,服务端响应请求,两者建 立连接开始通信。
  2. 服务端: java.net.ServerSocket 类表示。创建 ServerSocket 对象,相当于开启一个服务,并等待客户端 的连接。

3.2 Socket类

1.socket类作用:

Socket 类:该类实现客户端套接字,套接字指的是两台设备之间通讯的端点
套接字:包含了IP地址和端口号的网络单位

2.构造方法:

public Socket(String host, int port):创建套接字对象并将其连接到指定主机上的指定端口号。如果指 定的host是null ,则相当于指定地址为回送地址。
String host:服务器主机的名字/服务器的IP地址
int port:服务器的端口号

3.成员方法:

放法名 作用
public InputStream getInputStream() 返回此套接字的输入流。 如果此Scoket具有相关联的通道,则生成的InputStream 的所有操作也关联该通道。 关闭生成的InputStream也将关闭相关的Socket。
public OutputStream getOutputStream() 返回此套接字的输出流。 如果此Scoket具有相关联的通道,则生成的OutputStream 的所有操作也关联该通道。 关闭生成的OutputStream也将关闭相关的Socket。
public void close() 关闭此套接字。 一旦一个socket被关闭,它不可再使用。 关闭此socket也将关闭相关的InputStream和OutputStream 。
public void shutdownOutput() 禁用此套接字的输出流。任何先前写出的数据将被发送,随后终止输出流

4.实现步骤:

  • 1.创建一个客户端对象Socket,构造方法绑定服务器的IP地址和端口号
  • 2.使用Socket对象中的方法getOutputStream()获取网络字节输出流OutputStream
  • 3.使用网络字节输出流OutputStream对象中的方法write给服务器发送数据
  • 4.使用Socket对象中的方法getInputStream() 获取网络字节输入流InputStream对象
  • 5.使用网络字节输入流InputStram对象中的方法read读取服务器回写的数据
  • 6.释放资源

例子(和下面的例子是连在一起的):

package untl1;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
public class MySocket {public static void main(String[] args) throws IOException {Socket  socket=new Socket("127.0.0.1",8808);OutputStream os=socket.getOutputStream();os.write("你为啥这么帅".getBytes());InputStream is=socket.getInputStream();byte [] arr=new byte[1024];int len=is.read(arr);System.out.println(new String(arr,0,len));}
}

3.3 ServerSocket类

1.ServerSocket 类作用: >ServerSocket 类:这个类实现了服务器套接字,该对象等待通过网络的请求。

2.构造方法:

public ServerSocket(int port) :使用该构造方法在创建ServerSocket对象时,就可以将其绑定到一个指 定的端口号上,参数port就是端口号

3.成员方法:

public Socket accept() :侦听并接受连接,返回一个新的Socket对象,用于和客户端实现通信。该方法 会一直阻塞直到建立连接

4.实现步骤:

  • 1.创建服务器ServerSocket对象和系统指定的端口号
  • 2.使用ServerSocket对象中的方法accept,获取到请求的客户端对象Socket
  • 3.使用Socket对象中的方法getInputStream()获取网络字节输出流 InputStream对象
  • 4.使用网络字节输入流InputStream对象中的方法read,读取客户端发送的数据
  • 5.使用Socket对象中的方法getOutStream()获取网络字节输出流OutputStram对象
  • 6.使用网络字节输出流OutputStream对象中的方法write,给客户端回写数据
  • 7.释放资源

例子(和上边的例子连在一起的):

package untl1;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
public class MyServerSocket {public static void main(String[] args) throws IOException {ServerSocket  serverSocket=new ServerSocket(8808);Socket  socket=serverSocket.accept();InputStream is=socket.getInputStream();byte [] arr=new byte[1024];int len=is.read(arr);System.out.println(new String(arr,0,len));OutputStream  os=socket.getOutputStream();os.write("帅到无能为力,帅到感动自己".getBytes());socket.close();serverSocket.close();}
}

本例子和上边例子连在一起就组成了一个完整的客户端和服务器,注意这里服务器要先运行,这样客户端才能和服务器进行连接,然后相互交换数据
运行结果:
本例子输出:
你为啥这么帅
上一个例子输出:
帅到无能为力,帅到感动自己

3.4 TCP通信分析图解

1 .【服务端】启动,创建ServerSocket对象,等待连接。 Socket client = new Socket(“127.0.0.1”, 6666); ServerSocket server = new ServerSocket(6666);
2. 【客户端】启动,创建Socket对象,请求连接。
3. 【服务端】接收连接,调用accept方法,并返回一个Socket对象。
4. 【客户端】Socket对象,获取OutputStream,向服务端写出数据。
5. 【服务端】Scoket对象,获取InputStream,读取客户端发送的数据。
6. 【服务端】Socket对象,获取OutputStream,向客户端回写数据。
7. 【客户端】Scoket对象,获取InputStream,解析回写数据。 ]
8. 【客户端】释放资源,断开连接。

Java网络编程从0——》入门相关推荐

  1. 【带你入门】java网络编程

    网络编程 网络编程对于很多的初学者来说,都是很向往的一种编程技能,但是很多的初学者却因为很长一段时间无法进入网络编程的大门而放弃了对于该部分技术的学习. 在 学习网络编程以前,很多初学者可能觉得网络编 ...

  2. java消息头,Java网络编程从入门到精通:HTTP消息头字段

    Java网络编程从入门到精通:HTTP消息头字段 一.通用头字段 1. Connection 这个字段只在HTTP1.1协议中存在.它决定了客户端和服务器进行了一次会话后, 服务器是否立即关闭网络连接 ...

  3. Java网络编程(一)网络编程入门知识

    文章目录 第一章 Java网络编程入门 1.前言 1.1 进程之间的通信 1.2 计算机网络概念 1.3 网络模型之OSI参考模型 1.4 TCP/IP参考模型和TCP/IP协议 1.4.1 模型解析 ...

  4. Java从入门到实战总结-3.5、Java网络编程

    Java从入门到实战总结-3.5.Java网络编程 文章目录 Java从入门到实战总结-3.5.Java网络编程 1.网络简述 (1).什么是计算机网络 (2).什么是计算机的IP地址 (3).什么是 ...

  5. java网络编程入门到精通

    Java网络编程从入门到精通(1):Internet地址概述 . Java网络编程从入门到精通(2):创建InetAddress对象的四个静态方法 . Java网络编程从入门到精通(3):为什么不能直 ...

  6. 04.Java网络编程(转载)

    1.网络编程 1.1计算机网络概述 网络编程的实质就是两个(或多个)设备(例如计算机)之间的数据传输. 按照计算机网络的定义,通过一定的物理设备将处于不同位置的计算机连接起来组成的网络,这个网络中包含 ...

  7. java网络编程(二)

    注意:架构师学习资源已更新. 获取方式:在公众号内回复"架构师资源" 文章推荐 精选java等全套视频教程 精选java电子图书 大数据视频教程精选 1.2 网络编程技术 前面介绍 ...

  8. JAVA网络编程知识学习

    JAVA网络编程知识学习 学习目标 第一章 网络编程入门 1.1软件结构 1.2 网络通信协议 1.3 协议分类 1.4 网络编程三要素 协议 IP地址 IP地址分类 常用命令 端口号 InetAdd ...

  9. 网络编程懒人入门(九):通俗讲解,有了IP地址,为何还要用MAC地址?

    1.前言 标题虽然是为了解释有了 IP 地址,为什么还要用 MAC 地址,但是本文的重点在于理解为什么要有 IP 这样的东西.本文对读者的定位是知道 MAC 地址是什么,IP 地址是什么. (本文同步 ...

最新文章

  1. 模板 - 最小斯坦纳树
  2. 并发编程之多进程进程进程
  3. python安装教程win10-PyCharm 安装教程(Windows)
  4. 老弟,Redis 6.0 除了多线程,别忘了这个牛逼特性!
  5. Gradle项目中gradle.build文件中的buildScript代码块
  6. Redis安装及基本配置
  7. 2018年最新的single-cell-RNA-seq analysis repositories
  8. 给SAP Spartacus开源项目提交代码时的注意事项
  9. java中break标记的使用
  10. 设计模式之模版方法模式
  11. eclipse 中使用字符流复制文件乱码解决
  12. 高德地图导航,不显示地图只有语音
  13. 算法:(1)确定字符互异
  14. 基于RabbitMQ实现的订单超时功能-记录备查
  15. Nginx配置支持mp4视频流播放,超简单
  16. Winsock网络编程头文件及库文件的设置
  17. 系综理论(Ensemble Theory)
  18. 乒乓球 牛客 NTT
  19. 代码全部自动生成,程序员还有什么用?
  20. 中兴网络设备交换机路由器查看ip状态查看IPv4查看IPv6状态命令方法

热门文章

  1. 第六讲 使用第三方库及简单网页
  2. NOIP2008 双栈排序
  3. [Android学习笔记二] View转化Bitmap
  4. .net 默认时间格式不正确
  5. Reading——The Non-Designer's Design Book
  6. 关于.cpp文件包含另一个.cpp文件出错的原因以及解决办法
  7. 调用WebService时加入身份验证,以拒绝未授权的访问
  8. 华清远见java考试题_Java面试题,你能答对几个?
  9. Ubuntu 启动自动登录
  10. 【图解计算机组成原理】第1章 计算机系统概论