网络编程的学习

条件

如果要实现两台机器之间实现通信,必须要满足几点要求:

1、需要知道对方的 IP 地址。

2 、需要知道对方的哪一个端口号来做数据的接受。

3 、通信的双方,需要遵循相同的通信协议。

IP

ip地址:IP是 Internet Protocol (网络互连协议),在计算机中,使用IP地址来描述一个上网终端的唯一的地址编 号。分为IPv4和IPv6.

IPv4 : 使用4个字节来描述一个IP地址,由四部分组成,每一部分一个字节。

IPv6 : 使用6个字节来描述一个IP地址,由六部分组成,每一部分一个字节。

ip地址的分类:

A类:1.0.0.1~125.255.255.254保留给政府机构

B类:128.0.0.1~191.255.255.254分配给大中型企业

C类:192.0.0.1~223.255.254 分配给有需要的个人

D类:224.0.0.1~239.255.255.254 用于组播

E类:240.0.0.1~255.255.255.254用于实验

端口号

端口:是设备与外界进行通信的数据的出口。端口号的范围: [0,65535]。

常见端口占用:3306--MySQL;1521--Oracle;8080--Tomcat.

通信协议

常用的通信协议有:TCP 、UDP 、HTTP;而OSI模型过于理想化,未能在因特网上进行广泛推广,在这里章节,我们着重讲解一下TCP协议。

TCP协议

是一个传输层的通信协议,是一个安全的,面向连接的通信协议。所谓的安全,指的是在数据传递的过程中,不会出现数据丢失的问题。 特点:安全的、面向连接。TCP/IP 因其传输控制协议(TCP)和网络互联协议(IP)而得名。实际上是一组协议,其包含多个具有不同功能且互为关联的协议TCP/IP协议模型从更实用的角度出发,形成了高效的四层体系结构,即网络接口层、IP层、传输层和应用层。

TCP的三次握手

第一次握手:建立连接时,由客户端向服务端发送一个 syn 包, syn包中是同步序列编号, 并进入SYN_SENT 状态,并等待服务器确认。

第二次握手:服务器收到了 syn 包,服务器必须确认客户端的syn,同时自己也发送一个syn包给客户端,即 SYN_ACK 包,并进入到 SYN_RECV 状态。

第三次握手:客户端收到了服务端 SYN_ACK 包,并向服务端回复一个 ACK 包,此时客户端和服务端会进 入到TCP连接成功状态。 ESTABLISHED。

C/S架构模型

CS架构由客户端和服务器两个部分组成,通常采用C/S模式进行通信。其中,客户端负责向用户提供界面和交互功能,而服务器则负责存储和处理数据。在这种架构中,客户端和服务器之间通过网络进行通信,客户端向服务器发出请求,服务器响应并返回相应的结果。目前,CS架构已被广泛应用于各种场景中,如Web应用程序、电子邮件、数据库管理等,并且具有可扩展性、可靠性和安全性等优点。

TCP利用Socket(套接字)接口来实现C/S模型的网络程序开发,其早已被广泛的采用。通常,主动发起通信的应用程序属于客户端。而服务器则是等待通信请求,当服务器收到客户端的请求,执行需要的运算然后向客户端返回结果。如我们使用QQ软件时,我们电脑上安装的就是一个客户端软件,而腾讯必需运行一个服务器。

Socket套接字

socket被称为套接字,用于描述IP地址和端口号。主机上一般运行了多个服务软件,同时提供多种服务,每种服务都会打开一个Socket,并绑定到一个端口上,不同的端口对应不同的服务。Socket和ServerSocket类位于java/net包中。SetverSocket用于服务端,Socket是建立网络连接时使用。在连接成功时,应用程序两端都会产生一个Socket实例,两个Socket构成一个通信管道,操作这个实例,完成所需要的通信。

套接字的7个基本操作:1.连接到远程主机 2.绑定到端口 3.接收从远程机器来的连接请求 4.监听得到的数据 5.发送数据 6.接收数据 7.关闭连接

服务端编程

1.调用ServerSocket(int port)创建一个服务端套接字,并绑定到指定端口。

2.调用accept(),监听连接请求,如果客户端请求连接,则接受连接,返回通信套接字。

3.调用Socket类的getOutputStream和getInputStream获取输出流和输入流,开始网络数据的发送和接收。

4.最后关闭通信套接字

客户端编程

1、创建Socket。根据指定的IP和Port构造Socket类对象,并发送连接请求,如果服务端相应,则建立客户端到服务器的通信线路。

2、通过Socket获取与服务器的通信流。使用getInputStream()方法获得输入流,使用getOutputStreamI()方法获得输出流。

3、按照一定的协议对Socke进行读写操作。通过输入流读取服务端相应的信息,通过输出流将信息发送给服务端

4、关闭Socket。断开客户端到服务器的连接,释放线路。

流链接

1、客户端和服务器端的套接字对象诞生后,必须进行输入、输出流的连接。

2、套接字调用close()可以关闭双方的套接字连接,只要乙方关闭连接,就会导致对方发生IOException异常。

3个常用的API

InetAddress,是一个用来描述IP地址的类;常用的两个子类:Inet4Address,Inet6Address。他的实例对象由一个IP地址和可能与之对应的主机名(域名)组成。(互联网中的主机地址有两种表现形式:域名: www.baidu.com ,IP地址:110.242.68.4 ,域名容易记忆,当在连接网络时输入一个主机的域名后,域名服务器(DNS)负责将域名转化成IP地址,这样才能和主机建立连接。)

Socket,描述TCP中的客户端的类。构造器:Socket(InetAddress address,int port), Socket(String host,int port)

方法:InetAddress getLocalAddress():返回对方Socket中的IP的InetAddress对象 int getLocalPort():返回对方Socket的IP地址 int getPort():返回对方Sorket的端口号 void close()throws IOException :关闭Socket,释放资源 InputStream getInputStream() throws IOException:获取与Socket相关联的字节输入流,用于从Socket中读数据。 OutputStream getOutputStream() throws IOException:获取与Socket相关联的字节输出流,用于向Socket中写数据。

ServerSocket

用来描述TCP中服务端的类

构造器:ServerSorket(int port)

常用方法:1.Socket accept() throws IOException:等待客户端的连接请求,返回与该客户端进行通信用的Socket对象2.void close()throws IOException关闭监听Socket

3.InetAddress getInetAddress()返回此服务器套接字的本地地址

4.int getLocalPort()返回此套接字在其上监听的端口号

5.SocketAddress getLocalSocketAddress()返回此套接字绑定的端口的地址

6.void setSoTimeout(int timeout) throws SocketException设置accept()方法等待连接的时间为timeout毫秒。若时间已到,还没有客户端连接,则抛出InterruptedIOException异常,accept()方法不再阻塞,该倾听Socket可继续使用。若timeout值为0,则表示accept()永远等待。该方法必须在倾听Socket创建后,在accept()之前调用才有效。

  • 13
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值