Java实现局域网内单播
来源:互联网 发布:js防水液体怎么用 编辑:程序博客网 时间:2024/05/21 08:26
前面我写过一篇文章讲java实现组播,今天我们就来看看java怎么实现局域网内单播。
我们先来补充一下网络编程的两个要点:
1. 以进程为对象来看待问题会比较简单一点。进程是最小的程序单元,而网络进程在建立网络连接的时候会占用一个端口。
2. 不管是单播还是组播,其实都是进程间通信。
所以实现单播最重要的是指定IP地址和进程端口。
如果是本机测试,IP地址相同是必然的,只要发送进程和接收进程使用不同的端口(注意在发送时保持目的端口与接收进程的端口一致)就可以互相通信,否则会出现IP地址被占用的异常。
局域网内单播有两种实现方式:一种是无连接方式,另一种是面向连接方式。
我们先来看无连接的方式:
首先我们继承DatagramSocket类,并封装了发送和接收消息的方法。
import java.net.*;import java.io.*;/** * 继承数据报套接字类 * 实现发送消息和接收消息的方法 * @author michael * */public class MyDatagramSocket extends DatagramSocket {static final int MAX_LEN = 100;MyDatagramSocket() throws SocketException {super();}MyDatagramSocket(int port) throws SocketException {super(port);}public void sendMessage(InetAddress receiverHost, int receiverPort,String message) throws IOException {byte[] sendBuffer = message.getBytes();DatagramPacket datagram = new DatagramPacket(sendBuffer,sendBuffer.length, receiverHost, receiverPort);this.send(datagram);}public String receiveMessage() throws IOException {byte[] receiveBuffer = new byte[MAX_LEN];DatagramPacket datagram = new DatagramPacket(receiveBuffer, MAX_LEN);this.receive(datagram);String message = new String(receiveBuffer);return message;}}
-------------------------------------------------Receiver.java---------------------------------------------------
import java.net.*;/** * 采用无连接的方式实现进程间通信 * @author michael * */public class Receiver {public static void main(String[] args) {try {InetAddress receiverHost = InetAddress.getByName("127.0.0.1");int myPort = 1234;// 本进程端口int receiverPort = 5689;// 接收进程的端口String message = "Hi Sender";MyDatagramSocket mySocket = new MyDatagramSocket(myPort);System.out.println(mySocket.receiveMessage());mySocket.sendMessage(receiverHost, receiverPort, message);mySocket.close();} catch (Exception ex) {System.out.println(ex);}}}
-------------------------------------------------Sender.java---------------------------------------------------
import java.net.*;/** * 采用无连接的方式实现进程间通信 * @author michael * */public class Sender {public static void main(String[] args) {try {InetAddress receiverHost = InetAddress.getByName("127.0.0.1");int myPort = 5689;int receiverPort = 1234;String message = "Hello Receiver";MyDatagramSocket mySocket = new MyDatagramSocket(myPort);mySocket.sendMessage(receiverHost, receiverPort, message);System.out.println(mySocket.receiveMessage());mySocket.close();} catch (Exception ex) {}}}
代码里面我采用的是本机测试,不过我试过了联机测试,是可以的。
下面再看面向连接的方式:
面向连接的方式跟无连接的方式大体相同,只是多了一个建立连接和断开连接的过程。
-------------------------------------------------Receiver.java---------------------------------------------------
import java.net.*;/** * 采用面向连接的方式实现进程间通信 * @author michael * */public class Receiver {public static void main(String[] args) {try {InetAddress senderHost = InetAddress.getByName("127.0.0.1");int senderPort = 1234;int myPort = 4568;String message = "Hi Sender";MyDatagramSocket mySocket = new MyDatagramSocket(myPort);//与对方建立连接mySocket.connect(senderHost, senderPort);System.out.println(mySocket.receiveMessage());mySocket.sendMessage(senderHost, senderPort, message); //断开连接mySocket.disconnect();mySocket.close();}catch (Exception ex) {System.out.println("An exception has occured: " + ex);}}}
import java.net.*;/** * 采用面向连接的方式实现进程间通信 * @author michael * */public class Sender {public static void main(String[] args) {try {InetAddress receiverHost = InetAddress.getByName("127.0.0.1");int receiverPort = 4568;int myPort = 1234;String message = "Hello Receiver";MyDatagramSocket mySocket = new MyDatagramSocket(myPort);mySocket.connect(receiverHost, receiverPort);mySocket.sendMessage(receiverHost, receiverPort, message);System.out.println(mySocket.receiveMessage());mySocket.disconnect();mySocket.close();}catch (Exception ex) {System.out.println(ex);}}}
- Java实现局域网内单播
- JAVA实现局域网聊天
- java 实现局域网 上网代理
- java 实现局域网 上网代理
- java UDP实现局域网广播
- java UDP实现局域网广播
- java UDP实现局域网广播
- java 实现局域网多播
- java UDP实现局域网广播
- Java实现局域网流量监控
- Java实现局域网聊天软件分享
- Java实现局域网聊天软件分享
- java实现局域网内多人群聊
- java实现远程局域网内pc开机
- Java实现最简单局域网QQ
- UDP java实现局域网发和收
- java与c#使用Socket实现局域网聊天
- java学习笔记: 实现简易局域网聊天程序
- helper function: compare two SYSTEMTIME, to get time span
- 跑分都浮云,电脑安装android-x86 4.3教程
- Mina学习笔记(二) 简单客户端实例
- 写代码烦躁时看看,挺好
- 2.2: 随机生成一个n bit位的长整数
- Java实现局域网内单播
- second order system analysis in adaptive control 自控 带零点的二阶系统matlab仿真分析
- #英文版 CS145 1#
- 不可逆加密思路
- 设计模式学习之——六大设计原则之六:开闭原则
- test
- 斐波那契数列
- fatfree-f3小型php框架(一)
- windows和linux服务器的链接