一、可靠传输、不可靠传输(网络通讯)
可靠传输典型:TCP协议
不可靠传输典型:DCP协议(会丢包)
二、Socket
1.java.net.Socket 套接字
Socket封装了TCP协议的通讯细节,我们使用他可以与远端计算机建立TCP链接。并基于一堆流的IO操作完成与远端计算机的数据交换。
2.实例化Socket(建议端口号为8088)
实例化Socket时需要传入两个参数:
参数1:远端计算机的地址信息
参数2:远端计算机打开的服务端口
上述构造器实例化的过程就是与远端计算机建立链接的过程,如果成功的建立链接则实例化成功,否则构造器会抛出异常。
我们通过远端计算机地址(IP)(相当于楼号)可以找到网络上的远端计算机,通过服务端口(相当于门牌号)可以链接上运行在该计算机上的服务端应用程序(就是这个程序打开的该端口等待我们链接的)。
3.java.net.ServerSocket
ServerSocket是运行在服务端的,它的主要工作:
1)打开服务端口(客户端就是通过这个端口与服务端建立链接)
2)监听该服务端口,一旦一个客户端链接,则会返回一个Socket实例,并通过这个Socket实例与链接的客户进行交互
注:如果我们将Socket比喻成“电话”,那么ServerSocket相当于是“总机”。
4.实例化ServerSocket(是服务端建立端口,然后客户端使用该端口)
实例化ServerSocket的同时需要指定打开的服务端口,客户端就是通过该端口建立链接的。
如果该端口已经被操作系统其他程序占用了,那么这里会抛出异常:
绑定异常 地址 已经 被占用了
java.net.BindException:address already in use
5.Socket accept() 方法
ServerSocket提供的方法:
Socket accept()
该方法是一个阻塞方法,调用后开始等待,直到一个客户端与服务端建立链接为止,此时该方法会立即返回一个Socket,通过这个Socket与该客户端交互
6(1).getOutputStream()方法
通过Socket的方法:
OutputStream getOutputStream()
获取的字节输出流写出的字节会通过网络发送给远端建立好链接的计算机
6(2).getIntputStream()方法
通过Socket的方法:
InputStream getInputStream()
获取一个字节输入流,可以读取来自远端计算机发送过来的字节数据
7.若客户端没有关掉流
服务端在读取客户端消息这里,如果客户端没有调用socket.close()与服务端正常断开连接(例如客户端直接被杀掉了进程等操作),那么服务端这里会抛出 一个异常:
SocketException: Connection reset
这是由于客户端非正常操作导致的,服务端无法通过逻辑避免该异常的产生。
8.Socket类中的close()方法
在客户端的finally中调用socket.close()方法可以关闭与服务端的连接,当服务端读取到末尾时返回null
补充:
1.端口号范围为0~65535,前6000不要用。
2.TomCat端口号为8080.
3.localhost或者127.0.0.1表示本机的IP地址
本文详细解析了TCP和UDP协议在网络通信中的角色,展示了如何通过java.net.Socket和ServerSocket实现可靠与不可靠传输,涵盖了Socket实例化、端口号选择、ServerSocket的监听和accept方法,以及Socket连接管理和异常处理。

1万+

被折叠的 条评论
为什么被折叠?



