`
tmdpzc
  • 浏览: 13421 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

UDP 本地转发 消息,实现松耦合的进程间通信

阅读更多
最近的项目需求,让多个Android应用共用一条链路,采用AIDL Service 觉得耦合度比较高,于是想想能不能用UDP本地转发的方式来将数据传送到那条链路所在的Service中。
于是写了下面两个测试代码。没有定义协议,直接用了对象序列化的方法。

服务器端代码:
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.SocketException;


public class UDPServer extends Thread{
	private byte[] buffer = new byte[1024*4];
 	@Override
	public void run() {
		try {
			DatagramSocket mServerSocket = new DatagramSocket(8803);
			DatagramPacket mPacket = new DatagramPacket(buffer, buffer.length);
			while (true) {
				mServerSocket.receive(mPacket);
				System.out.println("接收到的长度:" + mPacket.getLength());
				System.out.println("端口地址:" + mPacket.getAddress().getHostAddress());
				byte[] data = mPacket.getData();
				ByteArrayInputStream in = new ByteArrayInputStream(data);
				ObjectInputStream obj_in = new ObjectInputStream(in);
				Message msg = (Message) obj_in.readObject();
				System.out.println(msg.toString());
			}
		} catch (SocketException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
	}
}



客户端代码:
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;
import java.io.UnsupportedEncodingException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.InetSocketAddress;
import java.net.Socket;
import java.net.SocketAddress;
import java.net.SocketException;
import java.util.Scanner;


public class UDPClient extends Thread{
	@Override
	public void run() {
		Scanner reader = new Scanner(System.in);
		SocketAddress address = new InetSocketAddress("127.0.0.1", 8803);
		
		while (true) {
			System.out.println("请输入Message的内容");
			String content = reader.next();
			try {
				ByteArrayOutputStream out = new ByteArrayOutputStream();
				ObjectOutputStream  obj_out = new ObjectOutputStream(out);
				Message msg = new Message(12, content);
				obj_out.writeObject(msg);
				byte[] data = out.toByteArray();
				DatagramPacket mPacket = new DatagramPacket(data, data.length,address);
				DatagramSocket mSocket = new DatagramSocket();
				mSocket.send(mPacket);
				mSocket.close();
			} catch (UnsupportedEncodingException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			} catch (SocketException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			
			
		}
		
	}
}

分享到:
评论

相关推荐

    头歌UDP Ping程序实现-接收并转发消息

    头歌UDP Ping程序实现-接收并转发消息头歌UDP Ping程序实现-接收并转发消息头歌UDP Ping程序实现-接收并转发消息头歌UDP Ping程序实现-接收并转发消息头歌UDP Ping程序实现-接收并转发消息头歌UDP Ping程序实现-接收...

    进程间通信_socket_udp_非阻塞

    采用UDP方式的进程间通信模型,支持非阻塞,socket编程,采用select网络模型。 采用UDP方式的进程间通信模型,支持非阻塞,socket编程,采用select网络模型。 采用UDP方式的进程间通信模型,支持非阻塞,socket编程...

    UDP 数据转发工具

    UDP数据转发 UDP 转发 实时转发

    Udp枢纽转发器v2.3

    可同时添加多条转发规则,实现UDP交通枢纽。单个exe文件,完全绿色,支持命令行参数、后台运行。 应用场景一:多个应用程序需要监听设备发来的UDP数据,但设备只能将数据发送到一个目标地址,这时可利用UDP枢纽转发...

    利用UDP协议与socket文件完成两个进程之间的网络通信

    利用UDP协议与socket文件完成两个进程之间的网络通信,这里分为服务端与客户端,服务端则是在云端运行的服务器进程,客户端则为计算机本地运行的进程。注意端口号要一致。

    windows的udp端口转发工具sokit

    windows7的netsh interface portproxy命令只支持tcp端口转发,如果要进行udp端口转发可以使用sokit,

    UDP通信方式实现.docx

    将UDP和TCP两种协议都写了示例代码,详细介绍Socket 编程接口,每一条代码都写了相应的注释,保证让你一看就懂!

    C#实现 TCP/UDP与串口之间相互转发通信,包含多个实例,有心跳过滤等

    C#实现 TCP/UDP与串口之间相互转发通信,包含多个实例,有心跳过滤等。包含串口之间相互转发。UDP与串口之间转发,TCP与串口之间相互转发。注释比较少,包含各种情况模拟事例,可自行参考相关描述。工程内包含多个...

    UDP端口转发工具(带源码)

    在公司内网做过测试,UDP端口可以转发成功,效率高,很好用。 直接运行sudppipe.exe即可,带参数说明。文件夹下其他文件是源码。

    UDP/TCP转发工具

    UDP/TCP转发工具 网络转发调试工具 特别好用

    基于MFC的UDP数据包转发

    数据包转发,本程序主要用于测试UDP数据包的转发情况,非常经典,是基于MFC实现的。数据包转发,本程序主要用于测试UDP数据包的转发情况,非常经典,是基于MFC实现的。数据包转发,本程序主要用于测试UDP数据包的转发...

    UNIX网络编程 第2卷 进程间通信.pdf(带书签)

    UNIX网络编程 第2卷 进程间通信 第1部分 简介和TCP/IP? 第1章 简介 第2章 传输层:TCP、UDP和SCTP 第2部 分基本套接口编程? 第3章 套接口编程简介 第4章 基本TCP套接口编程 第5章 TCP客户/服务器程序例子? 第6章 I/...

    TCP、UDP转发工具

    可以作为TCP、UDP的服务器、客户端和转发器使用。

    UDP转发程序

    UDP转发程序,转发UDP数据包

    UDP转发程序,转发多地址

    UDP转发程序,可实现转发多地址,转发多端口。小巧好用!注意:没有源代码~!

    C#的Socket实现UDP协议通信

    C#的Socket实现UDP协议通信 CSharp

    TCP和UDP套接字_简单的客户/服务器

    设计简单的客户/服务器,服务器实现并发同时响应客户的UDP通信要求,也能响应客户端发过来的TCP通信要求。

    C++实现UDP通信代码

    C++ UDP demo,实现UDP通信

    C# TCPIP/UDP转发

    C# TCPIP/UDP转发C# TCPIP/UDP转发C# TCPIP/UDP转发C# TCPIP/UDP转发C# TCPIP/UDP转发

    UNIX网络编程卷2进程间通信

     本书是为那些希望能够通过套接字接口实现程序间的相互通信的人而编写的,旨在为网络编程的初学者以及专家提供指导。要建立高度分布式、网络化的应用程序和服务,就需要对套接字和其他关键的网络API有深入的理解。...

Global site tag (gtag.js) - Google Analytics