- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在用 Java 开发游戏,我正在尝试通过互联网在同一台计算机上的客户端和服务器之间进行通信,并最终在多台计算机之间进行通信。我以前可以,但现在服务器似乎没有收到来自客户端的任何数据包。我会尝试发布所有相关代码。
这是在服务器上:
private DatagramSocket m_Socket = new DatagramSocket( 8000 );
private DatagramPacket m_DatagramPacket = new DatagramPacket( new byte[ 1024 ], 1024 );
...
while( true )
{
m_Socket.receive( m_DatagramPacket );
byte[] data = new byte[ 1024 ];
data = m_DatagramPacket.getData( );
System.out.println( "SERVER RECEIVING: " + data );
}
这是在客户端:
private DatagramSocket m_Socket = new DatagramSocket( null );
private DatagramPacket m_DatagramPacket = new DatagramPacket( new byte[ 1024 ], 1024 );
...
m_DatagramPacket.setAddress( InetAddress.getByName( "72.49.50.49" ) );
m_DatagramPacket.setPort( 8000 );
m_DatagramPacket.setLength( length );
m_DatagramPacket.setData( data );
// "data" is the byte array, "length" is the length of the array
m_Socket.send( m_DatagramPacket );
我在 Wireshark 中看到数据包,所以我知道它正在发送。
编辑:我可能不明白 Wireshark 是如何工作的,下面的截图是发送还是接收数据包?
无 Wireshark 鱼:
防火墙异常:
端口转发:
编辑:我还运行了这个端口测试程序来测试端口 8000,它说端口是开放的
更新:出于某种原因,我猜我们的路由器只是拒绝从源本地 IP 到外部 IP 目的地的连接。我可以使用来自同一网络的本地 IP 和来自不同网络的外部 IP 连接到服务器
最佳答案
如果您的客户端正在创建一个无限的 DatagramSocket
(通过将 null
传递给 DatagramSocket(SocketAddress bindaddr)
),这意味着将不是该套接字的任何原始端口。尽管这可能有效,但这显然不是正确的方法。在您的客户端,您必须进行以下更改。
private DatagramSocket m_Socket = new DatagramSocket();
private DatagramPacket m_DatagramPacket = new DatagramPacket( new byte[ 1024 ], 1024 );
使用默认的 DatagramSocket
构造函数会将套接字绑定(bind)到下一个可用端口,并保证通信中涉及源端口。
并且您的防火墙异常(exception)没有源 IP 和源端口模式或限制。请根据您的路由器检查是否需要这样做。
关于Java DatagramSocket 发送但不接收,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26090873/
我正在用 Java 开发游戏,我正在尝试通过互联网在同一台计算机上的客户端和服务器之间进行通信,并最终在多台计算机之间进行通信。我以前可以,但现在服务器似乎没有收到来自客户端的任何数据包。我会尝试发布
我正在尝试设置/增加数据报套接字的接收缓冲区大小。我想这样做,因为在位于同一本地网络上的 PC 和 Android 设备之间发送数据时我遇到了一些随机数据包丢失,我想测试增加缓冲区大小是否会对减少此
我编写了一个非常简单的 kotlin 程序来从客户端接收图像。关键部分如下。 while (running) { try { buf = ByteA
在我的 Android 应用程序中,我发送了 UDP 数据包,并使用此代码等待特定的数据包。当它到达时,我不需要再听了。但是,它处于“接收模式”,当我调用 socket.close() 时,它会抛出异
我正在用 Java 编写一个聊天程序,我已经被这个问题困了几个小时。这是我的类,等待客户端连接到服务器。每次新客户端连接时,我都会创建一个新的 ChatClient(String name, Data
我正在编写一段 UDP 网络程序(客户端 - 服务器),但遇到了一些麻烦。 我想使用流来输入/输出数据,所以我用谷歌搜索“udp inputstream”并找到UDPInputStream和 UDPO
尽管我知道我的 UDP 数据包按预期到达(通过 Wireshark),并且关闭了 Windows 防火墙 - 我非常简单的 Java 代码从未收到任何数据包。 byte[] buffer = new
以下代码可以重现该问题: int errAt = -1; try { System.out.println("start..."); for (int i = 0; i < 400
我有一个客户端需要在特定端口上监听传入的 UDP 广播消息。我通过使用 1500 毫秒的 setSoTimeout 初始化绑定(bind)到端口的 DatagramSocket 对象来实现此目的。 w
我已经编写了简单的测试类,用于监听 Eth 并接收所有 UDP 数据包,这些数据包将转到端口 5001: public class Main { public static void main(S
我在 Lua 中为游戏编写了一个插件,它通过 UDP 数据包(512 字节)将玩家信息发送到远程服务器,远程服务器从数据包中读取数据并将所有玩家信息聚合到一个 xml 文件中(然后可以是所有玩家都可以
我使用 Java 中的 DatagramSocket 类从用 C 编写的客户端接收 udp 数据包。以下是接收代码(服务器套接字已设置): byte[] inputByte = new byte[1]
在 Linux (Ubuntu 12.04) 和 Windows 7 上调用此代码,您会得到截然不同的结果: DatagramSocket socket = new DatagramSocket(44
我正在开发一个项目,其中包含 1 个 Java 服务器、1 个 Android 客户端、1 个 Dart Web 客户端和 1 个 Java 客户端。我已经完成了 Java 服务器和客户端并可以工作。
我有一个 DatagramSocket,我在循环中接收数据,它最终停止接收数据包。我向服务器发送一条建立连接的问候消息。然后我开始按预期接收数据包。最终它停止接收。 发送服务器已验证它们仍在通过 tc
这个问题已经有答案了: Sockets: Discover port availability using Java (10 个回答) 已关闭 7 年前。 这个问题是关于数据报套接字而不是 TCP 套
我正在开发 Java UDP 应用程序。应用程序中有一个线程,其唯一的工作是监听特定端口上的服务器。 我编写应用程序时错误地假设我正在监听的服务器将始终处于运行状态;然而,这是一个错误的假设。 如果我
我创建了一个java服务器,它在特定端口上监听udp数据包,当收到数据包时,它会创建一个新线程,并将一个新的datagramsocket绑定(bind)到该端口,因此,如果它在该端口上收到10个数据包
我正在创建一个 java 多人游戏,它解决了 LAN 上客户端和服务器之间不断发送 DatagramPackets 的问题。 客户端的 DatagramSocket 将随机停止从服务器接收数据包,因此
嗨,我想循环遍历我拥有的 n 个端口的列表,并为每个端口创建一个 DatagramSocket: for(int i = 0; i socketList = new ArrayList(); soc
我是一名优秀的程序员,十分优秀!