여러 UDP 데이터 그램을 동일한 대상 IP 주소로 보내는 Java 응용 프로그램을 개발했습니다. 당연히 대상 포트는 항상 동일하지만 각 데이터 그램에서 동일하게 유지되도록 원본 포트를 설정할 수없는 것 같습니다.
전송하는 데이터 패키지가 MTU보다 크면 패키지가 동일한 원본 포트에서 제대로 분할되지만 새 데이터 패키지를 보내면 원본 포트가 변경되어 새로운 방화벽 세션이 생성됩니다 (네트워크 관리자가 응용 프로그램이 생성하는 세션의 양 때문에 매우 나쁨).udp 소켓에 소스 포트 설정
는 지금 우리가 다음 문 패키지를 보내는 :
우리는 여러 가지 방법을 시도하고 결과는 항상 동일합니다, 우리는에 소스 포트를 설정 할 수없는 것 고정 값.
편집 - 붙여 넣기 실제 코드 : 시간에 대한
private boolean sendImage(byte[] imageData, InetAddress address,
int port) throws UnknownHostException, SocketException {
boolean ret = false;
DatagramSocket socket = null;
try {
socket = new DatagramSocket();
DatagramPacket dp = new DatagramPacket(imageData, imageData.length, address, PUERTO_UDP);
socket.send(dp);
ret = true;
} catch (IOException e) {
Main.lanzarExcepcion(e);
ret = false;
} finally {
if (socket != null) {
socket.close();
}
}
return ret;
}
감사합니다!
hmmm 이전 UDP 소켓이 닫혀 있지 않은 시간에 포트가 변경되어 OS에서 새 연결을 열려고하므로 이전 포트를 아직 사용할 수 없으며 다음 사용 가능한 포트가 열립니다. 그게 당신 문제입니까? 왜냐하면 나는 클라이언트의 포트를 변경하는 다른 이유를 생각할 수 없기 때문입니다. 또한 '* 일단 새로운 데이터 패키지를 보내면 소스 포트가 변경됩니다 *'라는 것을 설명 할 수 있습니까? 어떻게 새 연결을 열려고합니까? 같은 실에서? 다른 프로세스에서 ?? 어떻게 UDP 소켓을 닫고 있습니까? – AntJavaDev
또한 'DatagramPacket' 클래스에 대한 초기화가 적절하지 않아 ...... 전혀 컴파일되지 않을 수도 있습니다. – AntJavaDev
항상 동일하게 유지하는 방법은 항상 동일한 소켓에서 보내는 것이 아니라 분명히 요청 당 새 소켓을 생성합니다. – EJP