套接字的使用

Java使用了两套类来实现套接字:一套是 socket 和 serversocket 类,基于 tcp 协议实现;一套是 datagramsocket 类,基于udp协议实现。

一、socket类
socket类有四种构造函数:
(1)socket(string address, int port)
该构造函数指定了本机的地址和端口号,并且会检索该制定的端口号是否开放。
(2)socket(inetaddress address, int port)
同(1),但不会抛出 unknowhostexception 异常。
(3)socket(string host, int port, inetaddress localaddress, int localport)
该函数建立连接到特定的主机和端口的套接字,并会绑定到特定的本地端口和地址。这些本地参数主要是针对多地址的主机。如果主机名称不能解析,则不能建立连接。
(4)socket(inetaddress host, int port, inetaddress localaddress, int localport)
同(3),只是对于远端主机用 inetaddress 标注。

从socket中获取信息的方法:
(1)getInetAddress
返回套接字连接到的远端主机的地址
(2)getPort
返回套接字连接到的远端主机的端口号
(3)getLocalPort
返回套接字绑定在本地主机的端口号
(4)getLocalAddress
返回套接字关联的本地主机的地址
(5)getInputStream
从套接字中读取数据,并以流的形式传到程序中。可以用 DataInputStream 或者 InputStreamWriter 等装饰类来封装读取的流。
(6)getOutputStream
写入信息到远程对象上,所获得的输出流可以用别的装饰类进行封装,像DataOutputStream 或者 OutputStreamWriter。

二、serversocket类
socket类是客户端的socket,而 serversocket 类是 Java 中用来实现服务器端的类。服务器端程序与客户端程序的区别仅在于,服务器需要绑定特定的端口来使用 serversocket 对象。
serversocket 类的构造方法:
(1)ServerSocket(int port, int queuelength, inetAddress bindingaddress)
指定端口号,请求队列长度以及绑定地址。
(2)ServerSocket(int port)
该构造函数创建在一个指定的端口上,若是系统默认的端口,则由系统自动选择。对于不同机器、不同运行时间,运行结果会不一致。
(3)ServerSocket(int port, int queuelength)
把服务器套接字绑定到特定的端口号,并为队列分配足够的空间来支持特定数量的客户端套接字。

serversocket类中最重要的方法是accept(),用于接受客户端的连接请求,这是一个阻塞 I/O 操作。当连接建立的时候,它将作为socket对象被返回。

三、datagramsocket类
datagramsocket(自寻址套接字),是使用自寻址发送寻址信息。自寻址信息包含在自寻址包里面,自寻址包又包含在IP包里面。
datagramsocket包含了三个类:datagrampacket, datagramsocket 和 multicastsocket。datagrampacket 描述了自寻址包的地址信息, datagramsocket 表示了客户端程序和服务器程序自寻址套接字,而 multicastsocket 描述了能进行多点传送的自寻址套接字。以上3个类都位于java.net 包里面。
(1)datagrampacket类
地址信息和自寻址包以字节数组的方式同时压缩到 datagrampacket 类创建的对象里面。 datagrampacket 有多个构造函数:
datagrampacket(byte [] buffer, int length),该构造函数确定了自寻址数据包数组和数组的长度,关于自寻址数据包的地址和端口信息可以在后面通过调用 setaddress(inetaddress addr) 和 setport(int port) 来确定。
datagrampacket(byte [] buffer, int length, InetAddress addr, int port),该构造函数同时包含了地址和端口信息。
(2)datagramsocket类
datagramsocket 类在客户端创建自寻址套接字与服务器端进行通信连接,并发送和接收自寻址套接字。一般编程中,客户端创建自寻址套接字使用 DatagramSocket() 函数,而服务器则使用 DatagramSocket(port) 函数。一旦 datagramsocket 对象创建成功,则通过 receive(datagrampacket packet) 和 send(datagrampacket packet) 方法进行自寻址数据包的接收和发送。获取数据包之后可以通过 getData() 方法来返回自寻址数据包的一个引用。
(3)multicastsocket 类
网络API通过 multicastsocket 类和 multicastsocket 函数来支持多点传送。当一个客户程序要加入多点传送组的时候,就需要创建一个 multicastsocket 对象。 multicastsocket(int port) 构造函数允许应用程序通过指定的端口来接收自寻址包。加入多点传送组的时候使用joinGroup()方法,离开传送组的时候使用 leaveGroup()方法。由于 multicastsocket 拓展了 datagramsocket 类,所以 multicastsocket 对象就能够访问  datagramsocket 的方法,即通过 receive(datagrampacket packet) 和 send(datagrampacket packet) 方法进行自寻址数据包的接收和发送。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值