Tag: 数据报

一些java Datagram Socket问题

我最近已经厌倦了使用java进行套接字编程,我有几个一般的问题。 有一个bind()方法,以及一个connect()和disconnect()。 没有unbind()。 这是因为在断开套接字时是未绑定的吗? 一旦程序退出,垃圾收集是否会处理这个问题? 或者这甚至不是一个有效的问题? 另外,在创建DatagramSocket时,如果我只提供端口和地址,它有何不同? 我正在创建一个程序来从网络上收集数据,因为数据会浮动并记录下来。 我应该只使用本地地址吗? 我创建套接字时无法使用该地址导致我无法收集数据包? 我只是想更深入地了解这些事情的内部运作。

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

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

DatagramPacket为字符串

试图将收到的DatagramPacket转换为字符串,但我遇到了一个小问题。 不确定什么是最好的方法。 我将收到的数据大多是未知长度,因此我的接收端设置了一些缓冲区[1024]。 问题是,假设我发送字符串“abc”并在接收方执行以下操作… buffer = new byte[1024]; packet = new DatagramPacket(buffer, buffer.length); socket.receive(packet); buffer = packet.getData(); System.out.println(“Received: “+new String(buffer)); 我得到以下输出:abc [] [] [] []] [] [] [] …..一直到缓冲区长度。 我猜测最后的所有垃圾/空都应该被忽略,所以我一定做错了。“我知道buffer.length是问题,因为如果我将它改为3(对于这个例子),我的出来就好了。 谢谢。

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(); […]

VoIP RTP从/到服务器(在Java中)到/从android流式传输

我的目标是在GSM / UMTS / LTE网络中建立一个即按即说聊天应用程序; 最初我想使用多播地址和点对点而不会使服务器过载; 不幸的是,经过深入调查,我发现GSM / UMTS / LTE网络中不允许多播,因此我必须使用服务器来反弹VoIP数据包。 我不太喜欢这个解决方案,因为我必须重载服务器,但我找不到更好的解决方案。 如果你有一个替代解决方案非常适应… 因此,我必须将VoIP从Android客户端发送到服务器(PC),反之亦然。 服务器是Java,它必须接收VoIP数据包然后将VoIP数据包发送给其他N个客户端; 服务器是VoIP数据包的保护者。 我开发了代码,但它不起作用; 我没有任何错误,只是我有非常糟糕的VoIP服务:我丢失了很多碎片,我听到的是非常多的声音……错误在哪里? 我想它应该在服务器代码中; 服务器只需获取数据包并重新发送它们,而不知道它们是RTP上的VoIP。 如下请见 我用来将VoIP数据包发送到服务器的代码。 它的工作原理是因为当我将它用于将VoIP数据包直接从Android发送到Android的个人呼叫时我没有问题; 在android中接收来自服务器的数据包的代码非常相似,所以我不重新复制它。 如你所见,我使用android.net.rtp。 我在Java服务器上用来反弹VoIP数据包的代码 先谢谢你,福斯托 //使用ANDROID代码向服务器发送VOIP //Attribute definition private static final AudioCodec myAudioCodec_COSTANTE = AudioCodec.PCMU ; private static final int myAudioGroupTX_COSTANTE = AudioGroup.MODE_NORMAL ; private static final int myAudioGroupRX_COSTANTE = AudioGroup.MODE_NORMAL ; private […]