数据报数据包和套接字出现未知错误-Java网络
嘿,我一直在玩数据报类,我就是不明白为什么我的“服务器”不会从“客户端”接收数据包 我已经用服务器和客户端在我自己的电脑上同时运行进行了测试,它工作得很好,但是如果我尝试将服务器移到另一台电脑上,它…就不会了 现在我知道我一定是在插座/地址/端口等方面出了问题……我以前没有使用过网络,所以我知道的不多 以下是服务器代码:数据报数据包和套接字出现未知错误-Java网络,java,networking,Java,Networking,嘿,我一直在玩数据报类,我就是不明白为什么我的“服务器”不会从“客户端”接收数据包 我已经用服务器和客户端在我自己的电脑上同时运行进行了测试,它工作得很好,但是如果我尝试将服务器移到另一台电脑上,它…就不会了 现在我知道我一定是在插座/地址/端口等方面出了问题……我以前没有使用过网络,所以我知道的不多 以下是服务器代码: import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.FileNot
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.net.UnknownHostException;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.InetSocketAddress;
import java.net.SocketException;
import java.sql.Connection;
import java.util.ArrayList;
public class ServerThread extends Thread {
private boolean needsToRun;
private DatagramSocket socket;
public ServerThread() {
super();
needsToRun = true;
try {
socket = new DatagramSocket(4446);
}
catch (SocketException ex) {
ex.printStackTrace();
}
}
@Override
public void run() {
while(needsToRun) {
byte[] buf = new byte[265];
DatagramPacket packet = new DatagramPacket(buf,buf.length);
try {
socket.receive(packet);
}
catch(IOException e) {
e.printStackTrace();
}
String data = new String(packet.getData(),0,packet.getLength());
if(data != null)
System.out.println(data);
}
socket.close();
}
}
您将看到一些未使用的导入,但我只是简化了代码以使其成为基本的(大部分代码来自于我实际希望服务器在接收数据后对数据所做的操作,但我已经让该部分正常工作了)
以下是客户端代码:
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;
import java.net.UnknownHostException;
public class Main {
public static void main(String[] args) throws SocketException, UnknownHostException, IOException {
// get a datagram socket
DatagramSocket socket = new DatagramSocket();
// send request
String testInfo = "Hi";
byte[] buf = testInfo.getBytes();
/*This could possible be a point at which the code won't work.
*to get the bytes of the IP address of the computer I'm trying to run the server
*on I just did
* byte[] address = InetAddress.getLocalHost().getAddress();
* on the computer I was running the server on. I'm 95% sure that the IP addresses
* match.
*/
byte[] inet = {-64,-88,1,5};
InetAddress address = InetAddress.getByAddress(inet);
DatagramPacket packet = new DatagramPacket(buf, buf.length, address, 4446);
try {
socket.send(packet);
}
catch(Exception e) {
e.printStackTrace();
}
socket.close();
}
}
我已经检查了代码的明显部分,比如端口和地址(请参见代码注释中的)
所以我真正想要的是,如果你不明白为什么代码不能工作,那么你能告诉我一些端口可能会出问题的事情吗,等等(端口可能会关闭,等等)(除了我还相当肯定端口是打开的)
谢谢你的建议
我已经用服务器和客户端在我自己的电脑上同时运行进行了测试,它工作得很好,但是如果我尝试将服务器移到另一台电脑上,它…就不会了
我认为这是某种网络或防火墙问题,而不是Java客户机和服务器应用程序的问题。(在同一台机器上运行时,他们可以说话的证据表明了这一点……)
检查以下内容:
- 检查客户端是否可以解析服务器的IP地址;e、 g.尝试ping它或在已知服务器支持的其他端口上连接到它
- 检查客户端和服务器计算机上的软件防火墙是否允许端口4446上的UDP通信
- 如果两台机器之间有网桥和/或路由器,请检查它是否未阻塞端口4446上的UDP通信
- 检查客户端是否可以解析服务器的IP地址;e、 g.尝试ping它或在已知服务器支持的其他端口上连接到它
- 检查客户端和服务器计算机上的软件防火墙是否允许端口4446上的UDP通信
- 如果两台机器之间有网桥和/或路由器,请检查它是否未阻塞端口4446上的UDP通信