Java UDP代理不工作

Java UDP代理不工作,java,proxy,udp,Java,Proxy,Udp,我正在尝试创建一个代理服务器。我有一些UDP问题。我正在使用TeamSpeak 3进行测试,因为它使用UDP。到目前为止,TCP协议工作正常,问题在于UDP部分 UDPProxy.java package com.generic.ProxyServer.ProxyServer; import com.generic.ProxyServer.ProxyServer; import java.io.IOException; import java.net.DatagramPacket; impor

我正在尝试创建一个代理服务器。我有一些UDP问题。我正在使用TeamSpeak 3进行测试,因为它使用UDP。到目前为止,TCP协议工作正常,问题在于UDP部分

UDPProxy.java

package com.generic.ProxyServer.ProxyServer;

import com.generic.ProxyServer.ProxyServer;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.util.logging.Level;
import java.util.logging.Logger;

public class UDPProxy {

    public UDPProxy(DatagramPacket receivePacket, DatagramSocket serverSocket, String host, int local, int remote) {
        DatagramSocket proxySocket = null;
    try {
        proxySocket = new DatagramSocket();
        proxySocket.setReceiveBufferSize(8192);
        proxySocket.setSendBufferSize(8192);
        proxySocket.setReuseAddress(true);
    } catch (SocketException ex) {
        Logger.getLogger(UDPProxyServer.class.getName()).log(Level.SEVERE, null, ex);
    }        
        try {
            //ip of client
            InetAddress IPAddress = receivePacket.getAddress();

            //port of client
            int port = receivePacket.getPort();

            //actual server ip
            InetAddress pIPAddress = InetAddress.getByName(host);

            //convert
            byte[] real = new byte[receivePacket.getLength()];
            System.arraycopy(receivePacket.getData(), 0, real, 0, receivePacket.getLength());

            //Packet received
            ProxyServer.getInstance().getLogger().log("Packet from Client: " + receivePacket.getAddress().toString() + " Port: " + receivePacket.getPort() + " To: " + local + " Data: " + new String(real));

            //packet sent to actual server            
            DatagramPacket sendPacket = new DatagramPacket(real, real.length, pIPAddress, remote);

            //send packet
            proxySocket.send(sendPacket);

            //log that
            ProxyServer.getInstance().getLogger().log("Sent to Server: " + sendPacket.getAddress() + " Port: " + sendPacket.getPort());

            //a new receive data for server response
            byte[] receiveData = new byte[8192];

            //servers response packet
            DatagramPacket preceivePacket = new DatagramPacket(receiveData, receiveData.length);

            //receive that packet from server
            proxySocket.receive(preceivePacket);

            //convert
            byte[] preal = new byte[preceivePacket.getLength()];
            System.arraycopy(preceivePacket.getData(), 0, preal, 0, preceivePacket.getLength());

            //log that
            ProxyServer.getInstance().getLogger().log("Response From Server: " + preceivePacket.getAddress().toString() + " Port: " + preceivePacket.getPort() + " Data: " + new String(preal));

            //packet for response to send back to the client
            DatagramPacket psendPacket = new DatagramPacket(preal, preal.length, IPAddress, port);

            //send packet back to client
            serverSocket.send(psendPacket);

            ProxyServer.getInstance().getLogger().log("Response Sent To Client: " + psendPacket.getAddress().toString() + " Port: " + psendPacket.getPort());

        } catch (IOException ex) {
            Logger.getLogger(UDPProxyServer.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

}
UDPProxyServer.java

package com.generic.ProxyServer.ProxyServer;

import com.generic.ProxyServer.ProxyServer;
import java.io.BufferedReader;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;
import java.util.logging.Level;
import java.util.logging.Logger;

public class UDPProxyServer {

    public UDPProxyServer(String host, int local, int remote) {
        DatagramSocket serverSocket = null;
        try {
            serverSocket = new DatagramSocket(local);
            serverSocket.setReceiveBufferSize(8192);
            serverSocket.setSendBufferSize(8192);
            serverSocket.setReuseAddress(true);
        } catch (SocketException ex) {
            Logger.getLogger(UDPProxyServer.class.getName()).log(Level.SEVERE, null, ex);
        }        
        while (true) {
            try {
                byte[] receiveData = new byte[8192];
                DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length);
                serverSocket.receive(receivePacket);
                UDPProxy udp=new UDPProxy(receivePacket,serverSocket,host,local,remote);
            } catch (IOException ex) {
                Logger.getLogger(UDPProxyServer.class.getName()).log(Level.SEVERE, null, ex);
            }
        }

    }

}
当我尝试连接到代理服务器时,程序的日志显示从客户端发送的数据,服务器响应,但我无法建立到TeamSpeak 3服务器的连接

我错过了什么


更新:我正在重用serverSocket将数据包发送到服务器。修改问题以适应变化和新问题。

您解决问题了吗?ProxyServer.java中有什么?你能分享一下吗?