Java高级学习-网络
TCP:传输控制协议(Transmission Control Protocol)
UDP:用户数据包协议(User Datagram Protocol)
IP地址(Internet Protocol Address)
端口号:逻辑端口,分配随机端口号,由两个字节组成,0-65535之间,
- 80端口:网络端口
- 3306:mysql
- 1521:oracle
- 8080:Tomcat
TCP
数据交互,严格区分客户端(Client)和服务端(Server)
3次握手
服务器先启动,但不主动请求客户端,必须客户端请求服务器端,客户端与服务器端建立连接,此连接包含一个对象–IO对象,客户端与服务器端可以使用IO对象进行通信,IO对象是字节流对象。
服务器端:ServerSocket类 InputStream,OutputStream
客户端:Socket类 OutputStream,InputStream
因此,一次交互需要4个IO流对象
服务器端:多个客户端对象,服务器端通过server.accept( );获取请求的客户端对象,需要多个IO流对象。
但是服务器是没有IO流的,服务器只能获取到请求的客户端对象Socket,使用每一个客户端Socket中提高的IO流和客户端交互。
服务器使用客户端的字节输入流读取客户端发送的数据,服务器使用客户端的字节输出流给客户端回写数据,
Socket
客户端:java.net.Socket 实现客户端套接字,套接字是两台机器之间通信的端点
套接字:包含了Ip地址和端口号的网络单位
构造方法:Socket (String host , int port) 创建一个流套接字并将其连接到指定主机上的指定端口号。
参数:host 服务器主机名称/IP地址 ; port 服务器主机端口号
成员方法:
- OutputStream getOutputStream ( ) 返回此套接字的输出流
- InputStream getInputStream( ) 返回此套接字的输入流
- void close() 关闭套接字
步骤:
- 创建一个客户端对象Socket,构造方法绑定服务器的IP地址和端口号
- 使用Socket对象中的方法getOutputStream ( ) 获取网络字节输出流OutputStream对象
- 使用网络字节输出流OutputStream对象中的write,给服务器发送数据
- 使用Soket对象中的getInputStream( )获取网络字节输入流InputStream的对象
- 使用网络字节输入流InputStream对象中的方法read,读取服务器回写的数据
- 释放资源close(Socket)
注意:
- 客户端和服务器端交互时,不能使用自己创建的流对象,只能使用Socket中提供的网络流
- 当创建客户端对象Socket时,回请求服务器和服务器经过3次握手建立连接通路。
socket.shutdownOutput( ) //写入一个结束标记
ServerSocket
客户端:java.net.ServerSocket 实现客户端套接字
构造方法:ServerSocket( int port) 创建绑定到特定端口的服务器套接字
服务器端必须知道是哪个客户端请求的服务器,使用accept方法何取到请求的客户端对象Socket
成员方法:Socket accept( ) 侦听并接受此套接字的连接
使用:
ServerSocket server = new ServerSocket (8888);
Socket socket = server.accept();
- 1
- 2
- 3
步骤:
- 创建服务器ServerSocket对象和系统要指定的端口号
- 使用ServerSocket对象中的方法accpet获取到请求的客户端对象
- 使用Soket对象中的getInputStream( )获取网络字节输入流InputStream的对象
- 使用网络字节输入流InputStream对象中的方法read,读取客户端发送的数据
- 使用Socket对象中的方法getOutputStream ( ) 获取网络字节输出流OutputStream对象。
- 使用网络字节输出流OutputStream对象中的write,给客户端回写数据
- 释放资源close(Socket,ServerSocket)
文章来源: blog.csdn.net,作者:αβγθ,版权归原作者所有,如需转载,请联系作者。
原文链接:blog.csdn.net/weixin_38022166/article/details/115538469
- 点赞
- 收藏
- 关注作者
评论(0)