Tag: udp

Android UDP通讯

我在本网站上阅读了很多关于如何在Android中接收UDP数据包的post。 但是,这对我来说都不起作用! 一些基础知识: 我正在测试运行在3G上的HTC Incredible(Android 2.2)(不是wifi或其他任何东西)。 这里不涉及模拟器。 我的代码很简单: 我的服务器(在我的PC上运行)正在侦听端口8752上的UDP流量。 我的Android应用程序在随机端口上打开一个DatagramSocket,并使用此端口将数据包发送到我的服务器。 然后我保存此信息(InetAddress形成接收的数据包和数据包中找到的端口)。 我尝试从我的服务器(再次,在我的电脑上)发送UDP数据包到我的Android应用程序(在我的手机上运行),它不起作用。 //Server code to initialize the UDP socket (snippet) public void init() { datagram_server_socket = new DatagramSocket(port,local_addr); datagram_server_socket.setSoTimeout(1000); } // ANDROID APP上的代码片段,用于将数据包发送到服务器 public void connect() { Random r = new Random(System.currentTimeMillis()); int udp_port = 0; while(true){ try { udp_port = r.nextInt(1000)+8000; udp_port = 8000; […]

如何在Java中实现基于线程的UDP服务器?

如何在Java中实现基于线程的UDP服务器? 基本上我想要的是将多个客户端连接到服务器,并让每个客户端都有自己的线程。 唯一的问题是,我不知道如何检查客户端是否正在尝试连接到服务器并为其生成新线程。 boolean listening = true; System.out.println(“Server started.”); while (listening) new ServerThread().start(); 在这种情况下,服务器将生成新线程,直到内存不足。 这是ServerThread的代码(我想我需要一种机制,在客户端尝试连接之前停止创建ServerThread。 public ServerThread(String name) throws IOException { super(name); socket = new DatagramSocket(); } 所以Java编程的父亲请帮忙。

如何中断阻塞调用UDP套接字的receive()

我有一个UDP服务器监听来自客户端的数据包。 socket = new DatagramSocket(port); while (isListen) { byte[] data = new byte[1024]; DatagramPacket packet = new DatagramPacket(data, 0, data.length); socket.receive(packet); } receive()方法将在收到数据包之前永远等待。 是否有可能停止等待接收? 我可以设置一个boolean isListen来停止循环。 另一方面,如果套接字正在等待,那么如果没有从客户端发送数据包,它将永远等待。

Java,Netty,TCP和UDP连接集成:没有可用于UDP连接的缓冲区空间

我有使用TCP和UDP协议的应用程序。 主要假设是客户端通过TCP协议连接到服务器,并且在建立连接时,正在发送UDP数据报。 我必须支持两种连接服务器的方案: – 客户端在服务器运行时连接 – 客户端在服务器关闭时连接并重试连接直到服务器再次启动 对于第一个场景,一切都很好:我连接两个工作。 问题出在第二种情况。 当客户端尝试几次通过TCP连接并最终连接时,UDP连接函数会抛出exception: java.net.SocketException: No buffer space available (maximum connections reached?): bind at sun.nio.ch.Net.bind0(Native Method) at sun.nio.ch.Net.bind(Net.java:344) at sun.nio.ch.DatagramChannelImpl.bind(DatagramChannelImpl.java:684) at sun.nio.ch.DatagramSocketAdaptor.bind(DatagramSocketAdaptor.java:91) at io.netty.channel.socket.nio.NioDatagramChannel.doBind(NioDatagramChannel.java:192) at io.netty.channel.AbstractChannel$AbstractUnsafe.bind(AbstractChannel.java:484) at io.netty.channel.DefaultChannelPipeline$HeadContext.bind(DefaultChannelPipeline.java:1080) at io.netty.channel.AbstractChannelHandlerContext.invokeBind(AbstractChannelHandlerContext.java:430) at io.netty.channel.AbstractChannelHandlerContext.bind(AbstractChannelHandlerContext.java:415) at io.netty.channel.DefaultChannelPipeline.bind(DefaultChannelPipeline.java:903) at io.netty.channel.AbstractChannel.bind(AbstractChannel.java:197) at io.netty.bootstrap.AbstractBootstrap$2.run(AbstractBootstrap.java:350) at io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks(SingleThreadEventExecutor.java:380) at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:357) at io.netty.util.concurrent.SingleThreadEventExecutor$2.run(SingleThreadEventExecutor.java:116) at io.netty.util.concurrent.DefaultThreadFactory$DefaultRunnableDecorator.run(DefaultThreadFactory.java:137) at java.lang.Thread.run(Thread.java:722) 当我重新启动客户端应用程序而不对服务器做任何事情时,客户端将连接任何问题 […]

为什么即使在本地运行进程,也会无序地获取UDP数据报?

我正在开发流媒体服务器和Flash客户端之间的Java接口。 我注意到即使两个进程都在本地运行,UDP数据报也可能无序到达我的接口。 这是正常的吗? 我认为,由于没有数据报必须经过任何路由器或任何网络设备,因此不应该发生这种情况。

Java DatagramSocket将数据包发送到255.255.255.255失败

我正在编写一个java的网络程序,我想发送一些数据包到255.255.255.255,但它失败了,即使我发送到192.168.1.255,根据ifconfig命令的输出,是广播地址。 但是当我把它们发送给我的队友的IP时,它运行正常。 这是我的程序的代码: public class StackOverFlow { public static void main(String[] args) { Network net= new Network(); Scanner input= new Scanner(System.in); while(input.hasNext()) net.sendMessage(input.nextLine()); } } 我已经使用DatagarmSocket和DatagramPacket这样做,这是我对网络的实现: class Network { DatagramSocket socket; public Network() { try { socket = new DatagramSocket(8027); socket.setBroadcast(true); socket.connect(InetAddress.getByName(“255.255.255.255”), 8027); } catch (Exception e) { System.err.println(“Connection failed. ” + e.getMessage()); } listen(); […]

在UDP上发送和接收序列化对象

我试图使用UDP将服务器进程中的序列化对象发送到Java中的客户端进程。 问题是客户端在receive方法上被阻止。 有人可以帮忙吗?! 这是发送对象的服务器代码: ClientModel C1= new ClientModel(100,”Noor”,”Noor”,38,38,”asd”); ByteArrayOutputStream baos = new ByteArrayOutputStream(); ObjectOutputStream oos = new ObjectOutputStream(baos); oos.writeObject(C1); oos.flush(); byte[] Buf= baos.toByteArray(); packet = new DatagramPacket(Buf, Buf.length, client, port); socket.send(packet); 这是接收对象的客户端代码: byte[] buffer = new byte[100000]; packet = new DatagramPacket(buffer, buffer.length ); socket.receive(packet); System.out.println(“packet received”); 我只想接收能够重建的对象但我无法接收数据包本身。

设置套接字接收超时

我想将数据发送到服务器,然后等待一分钟的答案,然后关闭套接字。 怎么做? DatagramPacket sendpack = new ……; socket.send(pack); DatagramPacket recievepack = new …..; //wait 1 minute{ socket.recieve(buf); //wait 1 minute} socket.close();

Java中的UDP广播

早上。 我是Java和套接字连接的新手,但我试图在端口8001上将255.255.255.255上的UDP数据包/广播发送到设备。 我可以将数据发送得很好,但是当接收数据时,连接超时。 我有一个数据包嗅探器,我可以看到数据包发送,然后设备响应。 我很确定这是我在代码中遗漏的一个新手错误,但我已经坚持了一段时间,任何帮助都会受到赞赏。 m_Socket = new DatagramSocket(m_SERVERPORT); InetAddress address = InetAddress.getByName(m_SERVERIP); m_DataPack = new DatagramPacket(m_SERVERCMD.getBytes(), m_SERVERCMD.getBytes().length, address, m_SERVERPORT); m_Socket.setBroadcast(true); m_Socket.connect(address, m_SERVERPORT); m_Socket.send(m_DataPack); m_DataPack = new DatagramPacket(data, data.length, address, m_SERVERPORT); m_Socket.receive(m_DataPack); // This is where it times out data = m_DataPack.getData(); String received = data.toString(); System.out.println(“Received: ” + received); m_Socket.close(); 谢谢和Gig’Em。 编辑: 我不确定这是否有帮助但是当我观察m_Socket对象时,我可以在发送之前看到以下内容: bound […]

使用Java发送和接收UDP数据包?

我做了一个程序,从客户端发送UDP数据包到服务器这里是发送器代码 import java.io.IOException; import java.net.*; /** * * @author hp */ public class JavaApplication9 { /** * @param args the command line arguments */ public static void main(String[] args) throws UnknownHostException, SocketException, IOException { // TODO code application logic here byte[] buffer = {10,23,12,31,43,32,24}; byte [] IP={-64,-88,1,106}; InetAddress address = InetAddress.getByAddress(IP); DatagramPacket packet = new […]