- 软件结构
- cs架构 (客户端服务器架构)
- bs架构 (浏览器服务器架构)
- 网络通信协议:在同一个网络中进行通信的计算机需要遵守的规范
- TCP/IP 传输控制协议/因特网互联协议,是因特网最基本、最广泛的协议,它定义了计算机如何连接互联网,以及数据如何在他们之间传输的标准。
- 协议分类
- UDP
- 用户数据包协议,UDP是无协议通信协议,在数据传输时,数据的发送端和接收端不需要建立逻辑连接。
- 消耗资源少、效率高,但是由于UDP是面向无连接的,所以不能保证数据的完整性,并且数据被限制在64kb之内,超过这个限制就不能发送了。
- TCP
- 传输控制协议,是一种面向连接的协议,在传输之前,发送端和接收端先进行逻辑连接,然后再传送数据,提供了两台计算机之间的可靠无差错的数据传输。
- 三次握手,客户端和服务器在进行数据传输之前首先要建立连接,连接是通过三次握手来建立的,第一次握手是客户端向服务器发送连接请求,等待服务器确认;第二次握手是服务器向客户端发送一个响应,通知客户端收到了连接请求;第三次握手是客户端再次向服务器发送确认信息,确认连接。
- 网络编程三要素
- 协议
- IP地址
- 互联网协议地址,IP是一个计算机在网络上的编号
- 包括IPV4和IPV6
- IPV4是一个32位的二进制数,被分为四个字节
- IPV4是一个128位地址长度的ip,每16位一组,分为8组十六进制数,它是为了解决网络地址资源不够的问题。
- 端口号
TCP通信程序:TCp通信能实现两台计算机之间的通信,严格区分客户端跟服务器。
TCP客户端实现:向服务器发送连接请求,给服务器发送数据,读取服务器返回的数据
Java.net.Socket 实现了客户端套接字,套接字是两台计算机连接的端点,是包含了ip地址和端口号的网络单位。
构造方法:Socket(String host,int port) 创建一个套接字并将其连接到指定的主机的指定的端口上,其中host是ip,port是端口
成员方法:OutputStream getOutputStream() 返回此套接字的输出流对象;InputStream getInputStream() 返回此套接字的输入流对象; void close() 关闭流对象
实现步骤:
创建一个客户端对象Socket,构造方法中绑定ip和端口
使用Socket对象中的方法getOutputStream() 得到这个Socket对象的网络输出流
使用得到的网络输出流对象中的方法write,向服务器发送数据
使用getInputStream() 方法得到这个Socket对象的网络输入流
使用得到的网络输入流对象中的方法read读取服务器发送的数据
释放资源文章来源地址https://www.toymoban.com/news/detail-624241.html
需要注意的是,客户端与服务器的通信必须要使用Socket产生的流对象进行写数据,不能自己创建流对象;因为客户端需要先与服务器进行三次握手,所以客户端发起连接之前需要先保证服务器存在并且开启、端口号没有被占用。
import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.Socket; public class SocketClient { public static void main(String[] args) throws IOException { Socket socket=new Socket("127.0.0.1",8888); OutputStream os=socket.getOutputStream(); os.write("hello,服务器".getBytes()); InputStream is= socket.getInputStream(); byte[] bytes=new byte[1024]; int len=is.read(bytes); System.out.println(new String(bytes,0,len)); socket.close(); } }
- TCP服务端的实现:接收客户端的请求,并且给客户端发送数据
Java.net.ServerSocket实现了服务器套接字
构造方法:ServerSocket(int port) 创建绑定到特定端口的服务器套接字
成员方法:Socket accept() 监听并接受到此服务器的连接
实现步骤:
创建服务器ServerSocket对象和绑定系统的端口
使用ServerSocket的accept方法获取请求连接的客户端Socket对象
使用Socket对象的getInpurStream对象获取网络字节输入流InputStream对象
使用字节输入流对象的read方法读取客户端发送的数据
使用网络字节输出流getOutputStream对象获取字节输出流OuputStream
使用网络字节输出流给客户端发送信息文章来源:https://www.toymoban.com/news/detail-624241.html
释放资源
import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.ServerSocket; import java.net.Socket; public class SocketServer { public static void main(String[] args) throws IOException { ServerSocket server=new ServerSocket(8888); Socket socket=server.accept(); InputStream is=socket.getInputStream(); byte[] bytes=new byte[1024]; int len=is.read(bytes); System.out.println(new String(bytes,0,len)); OutputStream os= socket.getOutputStream(); os.write("收到".getBytes()); socket.close(); server.close(); } }
到了这里,关于网络编程入门的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!