用于身份验证的TCP连接和用于数据传输的UDP ADDRESS ALREADY IN USE

时间:2017-11-01 17:40:42

标签: java android sockets tcp udp

所以基本上我想在同一台服务器上使用TCP连接和UDP,从我的理解应该是可能的。我为每个协议使用单独的地址。

我将192.168.XX.XX用于TCP连接,127.0.0.1用于UDP,但在UDP客户端,我始终认为连接无法绑定因为地址已经在使用,试过多个端口组合,仍然没有变化。

我是一名初级自学成才的程序员;所以可能存在明显的错误。

TCP THREAD / server

public class LoginWorker implements Runnable {

    private Socket client;

    public void loginWorker(Socket client) {
        this.client = client;

    }

    private ServerAccess serverAccess = new ServerAccess();

    @Override
    public void run() {

        try {

            BufferedReader reader = new BufferedReader(new InputStreamReader(client.getInputStream()));
            String loginData = reader.readLine();
            System.out.println(loginData);
            OutputStreamWriter outputStreamWriter = new OutputStreamWriter(client.getOutputStream());
            PrintWriter writer = new PrintWriter(outputStreamWriter);
            writer.println(serverAccess.verifyGroupName(loginData));
            outputStreamWriter.flush();
            client.close();
        }

        catch (IOException e){

            System.out.println(e);
        }



    }
}

UDP THREAD / server

public class LocationServer implements Runnable  {


    public static void main(String[] args) throws IOException {


    }

    @Override
    public void run() {


        try {
            InetAddress inetAddress = InetAddress.getByName("127.0.0.1");
            DatagramSocket datagramSocket=null;
            DatagramPacket datagramPacketReceiver=null;
            DatagramPacket datagramPacketSender=null;
            byte[] buffer1 = new byte [1024];
            byte[] buffer2 = new byte [1024];
            if (datagramSocket == null) {
                datagramSocket = new DatagramSocket();
                datagramSocket.setReuseAddress(true);
                datagramSocket.connect(inetAddress,17877);

            }

            while (true) {
                String position="Empty";
                ServerAccess serverAccess2 = new ServerAccess();
                datagramPacketReceiver = new DatagramPacket(buffer1,buffer1.length);
                datagramPacketSender = new DatagramPacket(buffer2,0,buffer2.length,inetAddress,9998);

                System.out.println("Location Server Waiting...");
                buffer1=datagramPacketReceiver.getData();
                datagramSocket.receive(datagramPacketReceiver);
                position= new String(buffer1,datagramPacketReceiver.getOffset(),datagramPacketReceiver.getLength());

                System.out.println("Location Server Received..."+position);
                String[] locationData = position.split(";");
                System.out.println("Longitude.." + locationData[1]);
                String listPos = locationData[3];
                String latitude = locationData[0];
                String longitude = locationData[1];
                serverAccess2.locationConnexion(locationData);
            }
        }

        catch (IOException e) {

            System.out.println(e);
        }
    }
}

用法/服务器

public class Login {

    public static void main(String[] args) throws IOException {


            System.out.println("Server Initialized");
            System.out.println(InetAddress.getLocalHost());
            ServerSocket serverSocket = null;
            serverSocket= new ServerSocket(9999, 100);


            Thread udpThread = new Thread(){
                LocationServer y = new LocationServer();

                @Override
                public void run() { y.run();
                }
            };
                udpThread.start();


        LoginWorker x;
        x = new LoginWorker();

        while (true) {
            x.loginWorker(serverSocket.accept());
            x.run();
        }



    }
}

0 个答案:

没有答案