Эй, я играл с классами дейтаграмм и просто не могу понять, почему мой "сервер" не будет принимать пакеты от "клиента".
Я тестировал егос сервером и клиентом, работающими одновременно на моем собственном ПК, и это прекрасно работает, но если я пытаюсь перенести сервер на другой ПК, это ... не работает.
Теперь я знаю, что, должно быть, я что-то не так делаю с сокетами / адресами / портами bleh ... Я раньше не работал с сетями, поэтому я мало что знаю.
Вот код сервера:
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();
}
}
Очевидные части кода, я имеюпроверил, как порт и адрес (см. комментарий в коде).
Итак, что я действительно ищу, так это то, что если вы не видите, почему код не работает, то не могли бы вы рассказать мне о некоторых вещах, которые могут не работать с портами и так далее (порт может быть закрыти т. д. (за исключением того, что я также вполне уверен, что порт открыт)).
Спасибо за любые предложения.