Java高级学习-网络

举报
AAAI 发表于 2021/04/17 22:29:18 2021/04/17
【摘要】 文章目录 TCP3次握手SocketServerSocket B/S-浏览器/服务器结构 TCP:传输控制协议(Transmission Control Protocol) UDP:用户数据包协议(User Datagram Protocol) IP地址(Internet Protocol Address) 端口号:逻辑端口,分配随机端...


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() 关闭套接字

步骤:

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

步骤:

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

文章来源: blog.csdn.net,作者:αβγθ,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/weixin_38022166/article/details/115538469

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。