Java第二阶段JavaSE4(Socket编程基础)

本文详细解析了TCP和UDP协议在网络通信中的角色,展示了如何通过java.net.Socket和ServerSocket实现可靠与不可靠传输,涵盖了Socket实例化、端口号选择、ServerSocket的监听和accept方法,以及Socket连接管理和异常处理。

一、可靠传输、不可靠传输(网络通讯)

可靠传输典型: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地址

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值