知识大全 Java套接字编程(下)
Posted 信息
篇首语:没有口水和汗水,就没有成功的泪水。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 Java套接字编程(下)相关的知识,希望对你有一定的参考价值。
Java套接字编程(下) 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
自寻址套接字(Datagram Sockets) 因为使用流套接字的每个连接均要花费一定的时间 要减少这种开销 网络API提供了第二种套接字 自寻址套接字(datagram socket) 自寻址使用UDP发送寻址信息(从客户程序到服务程序或从服务程序到客户程序) 不同的是可以通过自寻址套接字发送多IP信息包 自寻址信息包含在自寻址包中 此外自寻址包又包含在IP包内 这就将寻址信息长度限制在 字节内 图 显示了位于IP包内的自寻址包的自寻址信息 与TCP保证信息到达信息目的地的方式不同 UDP提供了另外一种方法 如果自寻址信息包没有到达目的地 那么UDP也不会请求发送者重新发送自寻址包 这是因为UDP在每一个自寻址包中包含了错误检测信息 在每个自寻址包到达目的地之后UDP只进行简单的错误检查 如果检测失败 UDP将抛弃这个自寻址包 也不会从发送者那里重新请求替代者 这与通过邮局发送信件相似 发信人在发信之前不需要与收信人建立连接 同样也不能保证信件能到达收信人那里 自寻址套接字工作包括下面三个类 DatagramPacket DatagramSocket 和 MulticastSocket DatagramPacket对象描绘了自寻址包的地址信息 DatagramSocket表示客户程序和服务程序自寻址套接字 MulticastSocket描绘了能进行多点传送的自寻址套接字 这三个类均位于包内 DatagramPacket类 在使用自寻址包之前 你需要首先熟悉DatagramPacket类 地址信息和自寻址包以字节数组的方式同时压缩入这个类创建的对象中 DatagramPacket有数个构造函数 即使这些构造函数的形式不同 但通常情况下他们都有两个共同的参数 byte [] buffer 和 int length buffer参数包含了一个对保存自寻址数据包信息的字节数组的引用 length表示字节数组的长度 最简单的构造函数是DatagramPacket(byte [] buffer int length) 这个构造函数确定了自寻址数据包数组和数组的长度 但没有任何自寻址数据包的地址和端口信息 这些信息可以后面通过调用方法setAddress(InetAddress addr)和setPort(int port)添加上 下面的代码示范了这些函数和方法 byte [] buffer = new byte [ ]; DatagramPacket dgp = new DatagramPacket (buffer buffer length); InetAddress ia = InetAddress getByName ( ); dgp setAddress (ia); dgp setPort ( ); // Send datagram packet to port 如果你更喜欢在调用构造函数的时候同时包括地址和端口号 可以使用DatagramPacket(byte [] buffer int length InetAddress addr int port)函数 下面的代码示范了另外一种选择 byte [] buffer = new byte [ ]; InetAddress ia = InetAddress getByName ( ); DatagramPacket dgp = new DatagramPacket (buffer buffer length ia ); 有时候在创建了DatagramPacket对象后想改变字节数组和他的长度 这时可以通过调用setData(byte [] buffer) 和 setLength(int length)方法来实现 在任何时候都可以通过调用getData() 来得到字节数组的引用 通过调用getLength()来获得字节数组的长度 下面的代码示范了这些方法 byte [] buffer = new byte [ ]; dgp setData (buffer ); dgp setLength (buffer length); 关于DatagramPacket的更多信息请参考SDK文档 DatagramSocket类 DatagramSocket类在客户端创建自寻址套接字与服务器端进行通信连接 并发送和接受自寻址套接字 虽然有多个构造函数可供选择 但我发现创建客户端自寻址套接字最便利的选择是DatagramSocket()函数 而服务器端则是DatagramSocket(int port)函数 如果未能创建自寻址套接字或绑定自寻址套接字到本地端口 那么这两个函数都将抛出一个SocketException对象 一旦程序创建了DatagramSocket对象 那么程序分别调用send(DatagramPacket dgp)和 receive(DatagramPacket dgp)来发送和接收自寻址数据包 List 显示的DGSClient源代码示范了如何创建自寻址套接字以及如何通过套接字处理发送和接收信息 Listing : DGSClient java // DGSClient java import java io *; import *; class DGSClient public static void main (String [] args) String host = localhost ; // If user specifies a mand line argument that argument // represents the host name if (args length == ) host = args [ ]; DatagramSocket s = null; try // Create a datagram socket bound to an arbitrary port s = new DatagramSocket (); // Create a byte array that will hold the data portion of a // datagram packet s message That message originates as a // String object which gets converted to a sequence of // bytes when String s getBytes() method is called The // conversion uses the platform s default character set byte [] buffer; buffer = new String ( Send me a datagram ) getBytes (); // Convert the name of the host to an InetAddress object // That object contains the IP address of the host and is // used by DatagramPacket InetAddress ia = InetAddress getByName (host); // Create a DatagramPacket object that encapsulates a // reference to the byte array and destination address // information The destination address consists of the // host s IP address (as stored in the InetAddress object) // and port number the port on which the server // program listens DatagramPacket dgp = new DatagramPacket (buffer buffer length ia ); // Send the datagram packet over the socket s send (dgp); // Create a byte array to hold the response from the server // program byte [] buffer = new byte [ ]; // Create a DatagramPacket object that specifies a buffer // to hold the server program s response the IP address of // the server program s puter and port number dgp = new DatagramPacket (buffer buffer length ia ); // Receive a datagram packet over the socket s receive (dgp); // Print the data returned from the server program and stored // in the datagram packet System out println (new String (dgp getData ())); catch (IOException e) System out println (e toString ()); finally if (s != null) s close (); DGSClient由创建一个绑定任意本地(客户端)端口好的DatagramSocket对象开始 然后装入带有文本信息的数组buffer和描述服务器主机IP地址的InetAddress子类对象的引用 接下来 DGSClient创建了一个DatagramPacket对象 该对象加入了带文本信息的缓冲器的引用 InetAddress子类对象的引用 以及服务端口号 DatagramPacket的自寻址数据包通过方法sent()发送给服务器程序 于是一个包含服务程序响应的新的DatagramPacket对象被创建 receive()得到响应的自寻址数据包 然后自寻址数据包的getData()方法返回该自寻址数据包的一个引用 最后关闭DatagramSocket DGSServer服务程序补充了DGSClient的不足 List 是DGSServer的源代码 Listing : DGSServer java // DGSServer java import java io *; import *; class DGSServer public static void main (String [] args) throws IOException System out println ( Server starting \\n ); // Create a datagram socket bound to port Datagram // packets sent from client programs arrive at this port DatagramSocket s = new DatagramSocket ( ); // Create a byte array to hold data contents of datagram // packet byte [] data cha138/Article/program/Java/JSP/201311/19527相关参考
浅析C#中的套接字编程 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!大家都知道Java语言的强大功
套接字(socket)是网络计算机与应用程序之间发送和接收数据的方式的一种抽象描述它描述了(可能在不同的计算机上也可能在同一台计算机内的)两个通信点之间的连接 在实际操作中套接字编程往往与TCP
知识大全 在 WAS 中使用 Java 安全套接字扩展(图)
在WAS中使用Java安全套接字扩展(图) 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 本文提
最基本的Socket编程 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 示例程序是同步套接字程序
超线程多核心下Java多线程编程分析 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 一Java环
超线程多核心下Java多线程编程技术分析[4] 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!&nb
超线程多核心下Java多线程编程技术分析[3] 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!&nb
超线程多核心下Java多线程编程技术分析[1] 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!&nb
超线程多核心下Java多线程编程技术分析[2] 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!&nb
java对象序列化机制一般来讲有两种用途 需要将对象的状态保存到文件中而后能够通过读入对象状态来重新构造对象恢复程序状态 使用套接字在网络上传送对象的程序来说是很有用的