편집 기록

편집 기록
  • 프로필 김선우님의 편집
    날짜2017.07.18

    자바 소켓프로그래밍 서버 포트 관련 질문입니다.


    package DHSserver;
    
    import info.ClientInfo;
    
    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.nio.ByteBuffer;
    import java.nio.ByteOrder;
    import java.util.Arrays;
    
    public class Server {
    
        public DatagramSocket servSocket;
        private DatagramSocket receiveSocket;
        private int recvPort = 8003; //8002 -> 8003
        private int port = 9210; // 8000 -> 9211
        private DatagramPacket recvPacket;
        private DatagramPacket recvPacket2;
        String myAddr;
        byte[] recvBuffer = new byte[128];
        byte[] sendBuffer = new byte[128];
        byte[] pingTestBuffer = new byte[128];
        boolean isConnect = false;
        int count = 0;
    
        InetAddress clntAddr = null;
        private int clntPort;
        private DatagramPacket sendIdPacket;
        private DatagramPacket sendIdPacket2;
        ClientInfo clientInfo;
    
    
        public Server(ClientInfo clientInfo) throws SocketException{
            //servSocket = new DatagramSocket(recvPort);
            servSocket = new DatagramSocket();
            servSocket.setReuseAddress(true);
            servSocket.setBroadcast(true);
            servSocket = new DatagramSocket(new InetSocketAddress(recvPort));
    
    
            myAddr = clientInfo.myAddr;
            recvBuffer = new byte[128];
            recvPacket = new DatagramPacket(recvBuffer, recvBuffer.length);
            receiveSocket = new DatagramSocket(port);
    
            System.out.println("서버 생성자 실행");
        }
    
        public void ServerOn(){
            System.out.println("서버 온");
    
            Thread thread = new Thread(new Runnable() {
                @Override
                public void run() {
                    try {
                        while (!isConnect) {
                            if (count == 0) {
                                receiveSocket.receive(recvPacket);
                                clntAddr = recvPacket.getAddress();
                                clntPort = recvPacket.getPort();
                                System.out.println("클라이언트 IP = " + clntAddr );
                                System.out.println("클라이언트 PORT = " + clntPort);
    
                                String recvString = new String(recvPacket.getData(), 0, recvPacket.getLength());
                                sendBuffer = IntToByte(2); // ID값 지정
                                sendIdPacket = new DatagramPacket(sendBuffer, sendBuffer.length, clntAddr, clntPort);
                                receiveSocket.send(sendIdPacket);
    
                                isConnect = true;
                            }
    
                            else if (count == 1) {
                                //Log.d("juho", "ServerUserUDP - serverSocket while 2");
                                port = port + 10;
                                recvPacket2 = new DatagramPacket(recvBuffer, recvBuffer.length);
    
    //                            receiveSocket2 = new DatagramSocket(port);
    //                            receiveSocket2.receive(recvPacket2);
                                receiveSocket.receive(recvPacket2);
                                clntAddr = recvPacket2.getAddress();
                                clntPort = recvPacket2.getPort();
    
                                String recvString = new String(recvPacket2.getData(), 0, recvPacket2.getLength());
                                //recvPacket2 = new DatagramPacket(recvPacket2.getData(), recvPacket2.getData().length, clntAddr, clntPort);
                                recvPacket2.setData(recvBuffer);
                                sendBuffer = IntToByte(4);
    //                            recvPacket2 = new DatagramPacket(recvPacket2.getData(), recvPacket2.getData().length, clntAddr, clntPort);
                                sendIdPacket2 = new DatagramPacket(sendBuffer, sendBuffer.length, clntAddr, clntPort);
    //                            Log.d("jyj", "-------------"+recvPacket2.getData());
    //                            receiveSocket2.send(recvPacket2);
                                receiveSocket.send(sendIdPacket2);
    
    
    
                                isConnect = true;
                            }
                        }
    
                        //다중 연결을 위해 값 변경
                        if (count != 1) {
                            isConnect = false;
                        } else {
                            isConnect = true;
                        }
    
                    } catch (SocketException e) {
                        e.printStackTrace();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            });
            thread.start();
    
            while (clntAddr == null) {
                //Log.d("juho", "와일문 대기중");
                try {
                    Thread.sleep(2000);  //3초에서 2초로 수정함
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
            byte[] tempBuffer = new byte[9];
            if (count == 0) {
                //Log.d("jyj","패킷 값"+ recvPacket.getData());
                System.arraycopy(recvPacket.getData(), 9, tempBuffer, 0, 9);
                //InetAddress clntUserAddr = InetAddress.getByName(new String(tempBuffer));
                //Log.d("jyj", "실행확인1");
            } else {
                System.arraycopy(recvPacket2.getData(), 9, tempBuffer, 0, 9);
                //InetAddress clntUserAddr = InetAddress.getByName(new String(tempBuffer));
                //Log.d("jyj", "실행확인2");
            }
    
            //    Log.d("juho", "ServerUserUDP - be received client addr = " + clntUserAddr.getHostAddress());
    
            tempBuffer = new byte[4];
            if (count == 0) {
                System.arraycopy(recvPacket.getData(), 18, tempBuffer, 0, 4);
                //int clntUserPort = ByteToInt(tempBuffer);
            } else {
                System.arraycopy(recvPacket2.getData(), 18, tempBuffer, 0, 4);
                //int clntUserPort = ByteToInt(tempBuffer);
            }
            //    Log.d("juho", "ServerUserUDP - be received client port = " + clntUserPort);
    
    
            if (count == 0) {
                clientInfo = new ClientInfo(clntAddr, clntPort);
            } else {
                clientInfo.addrArray.add(clntAddr);
                clientInfo.portArray.add(clntPort);
            }
    
            count++;
            clntAddr = null;
            //return clientInfo;
        }
    
        // int -> byte 변환하는 함수
        private static byte[] IntToByte(final int integer){
            ByteBuffer buff = ByteBuffer.allocate(Integer.SIZE / 8);
            buff.putInt(integer);
            buff.order(ByteOrder.BIG_ENDIAN);
    
            return buff.array();
    
        }
    
        private static int byteToInt(byte[] bytes) {
            final int size = Integer.SIZE / 8;
            ByteBuffer buff = ByteBuffer.allocate(size);
            final byte[] newBytes = new byte[size];
            for(int i = 0; i< size; i++) {
                if (i + bytes.length < size) {
                newBytes[i] = (byte) 0x00;
                } else {
                    newBytes[i] = bytes[i + bytes.length - size];
                }
            }
            buff = ByteBuffer.wrap(newBytes);
            buff.order(ByteOrder.BIG_ENDIAN);
            return buff.getInt();
    
        }
    
    
    
    
    
            public void waitClientData(int num){
                while (true) {
                    // receive
                    byte[] sendBuffer = new byte[128];  //jun test
    
                    if (num == 0) {
                        DatagramPacket receivePacket = new DatagramPacket(recvBuffer, recvBuffer.length);
    //                  Log.d("juho", "ServerUserUDP - Receive Wait in Server..");
                        try {
                            System.out.println("waiting ClientData1");
                            receiveSocket.receive(receivePacket);
                            System.out.println("Receive Complete ClientData.."+ receivePacket.getAddress() + ", " + receivePacket.getPort());
                        } catch (IOException e) {
                            e.printStackTrace();
                           System.out.println("오류");
                        }
    
    //                  Log.d("jyj", "받아온 패킷값 확인 : " + Arrays.toString(receivePacket.getData()));
                        System.out.println("데이터 값 확인  : " + Arrays.toString(receivePacket.getData()));
    
    //                  Log.d("juho", "ServerUserUDP - Addr = " + receivePacket.getAddress() + ", port = " + receivePacket.getPort());
                        clntPort = receivePacket.getPort();
                        byte[] byteMode = new byte[4];
                        byte[] byteData = new byte[12];
                        byte[] getDataT;
                        byte[] setUser = new byte[4]; //jun test
                        int userid; //juntest
                        getDataT = receivePacket.getData();
                        for (int i = 0; i < 4; i++) {
                            byteMode[i] = getDataT[i];
                            sendBuffer[i] = getDataT[i];
                        }
                        for (int i = 4; i < 16; i++) {  //원래 i 16까지
                            byteData[i - 4] = getDataT[i];
                            sendBuffer[i] = getDataT[i];
    //                      Log.d("jyj","byteData값 확인"+(i-4)+"번째"+ byteData[i-4]);
                        }
    
                        for (int i = 12; i < 16; i++) {
                            setUser[i - 12] = getDataT[i];
                        }
                        userid = byteToInt(setUser);
                        System.out.println("유저 ID값 확인" + userid);
    
    //                  setUser = IntToByte(3);
    //                  for(int i = 12; i<16; i++)
    //                  {
    //                      byteData[]
    //                      sendBuffer[i] = setUser[i-12];
    //                  }
    
                        // 이 파일에서 보내는 Message는 SurFaceTest에 보내짐
                        // SurFaceTest에서는 onTouchMessage로 보냄
    
    
    //                  Message msg = new Message();
    //                  Log.d("juho", "Mode From Server = " + ByteToInt(byteMode));
    //                  msg.what = ByteToInt(byteMode); // TouchMove
    //
    //                  msg.obj = byteData;
    //                  Top_handler.sendMessage(msg);
                        System.out.println("ClientInfo 사이즈 : " + clientInfo.addrArray.size());
                        if (clientInfo.addrArray.size() == 2) {
                            if (userid == 2) {
                                recvPacket = new DatagramPacket(sendBuffer, sendBuffer.length, clientInfo.addrArray.get(1), clientInfo.portArray.get(1));
                                //Log.d("jyj", "다른 클라이언트에게 보내기 server -> client2 : " + clientInfo.addrArray.get(1) + ", " + clientInfo.portArray.get(1));
                            } else if (userid == 4) {
                                recvPacket = new DatagramPacket(sendBuffer, sendBuffer.length, clientInfo.addrArray.get(0), clientInfo.portArray.get(0));
                                //Log.d("jyj", "다른 클라이언트에게 보내기 server -> client1" + clientInfo.addrArray.get(0) + ", " + clientInfo.portArray.get(0));
                            }
                            try {
    //                      receiveSocket2.send(recvPacket);
                                System.out.println("보내기 1 작동");
                                receiveSocket.send(recvPacket);
                            } catch (IOException e) {
                                e.printStackTrace();
                            }
                        }
                    }
    //                      Log.d("juho", "SendMessage to Surface");
                    else {
                        DatagramPacket waitPacket2 = new DatagramPacket(recvBuffer, recvBuffer.length);
                        //Log.d("juho", "ServerUserUDP - Receive Wait in Server..");
                        try {
                            System.out.println("waiting ClientData2");
    //                          Log.d("juho", "ServerUserUDP - waiting ClientData..");
    
    //                      receiveSocket2.receive(waitPacket2);
                            receiveSocket.receive(waitPacket2);
    
    //                          Log.d("juho", "ServerUserUDP - Receive Complete ClientData.."+ receivePacket.getAddress() + ", " + receivePacket.getPort());
    //                          Log.d("juho", "ServerUserUDP - " );
                        } catch (IOException e) {
                            e.printStackTrace();
                        }
    //                  Log.d("jyj", "서버 리시브 패킷 데이터값1 : " + waitPacket2.getData());
    //                  Log.d("juho", "ServerUserUDP - Addr = " + waitPacket2.getAddress() + ", port = " + waitPacket2.getPort());
                        clntPort = waitPacket2.getPort();
                        byte[] byteMode2 = new byte[4];
                        byte[] byteData2 = new byte[12];
                        byte[] getDataT2;
                        byte[] setUser2 = new byte[4]; //jun test
                        int userid2; //juntest
                        getDataT2 = waitPacket2.getData();
                        for (int i = 0; i < 4; i++) {
                            byteMode2[i] = getDataT2[i];
                            sendBuffer[i] = getDataT2[i];
                        }
                        for (int i = 4; i < 16; i++) {
                            byteData2[i - 4] = getDataT2[i];
                            sendBuffer[i] = getDataT2[i];
                        }
    
                        for (int i = 12; i < 16; i++) {
                            setUser2[i - 12] = getDataT2[i];
                        }
                        userid2 = byteToInt(setUser2);
                        System.out.println("유저 ID값 확인" + userid2);
    
                        // 이 파일에서 보내는 Message는 SurFaceTest에 보내짐
                        // SurFaceTest에서는 onTouchMessage로 보냄
    //                  Message msg = new Message();
    //                  Log.d("juho", "Mode From Server = " + ByteToInt(byteMode2));
    //                  msg.what = ByteToInt(byteMode2); // TouchMove
    //
    //                  msg.obj = byteData2;
    //                  Top_handler.sendMessage(msg);
    
                        if (clientInfo.addrArray.size() == 2) {
                            if (userid2 == 2) {
                                recvPacket2 = new DatagramPacket(sendBuffer, sendBuffer.length, clientInfo.addrArray.get(1), clientInfo.portArray.get(1));
    
    //                          Log.d("jyj", "다른 클라이언트에게 보내기2 server -> client2" + clientInfo.addrArray.get(1) + ", " + clientInfo.portArray.get(1));
                            } else if (userid2 == 4) {
                                recvPacket2 = new DatagramPacket(sendBuffer, sendBuffer.length, clientInfo.addrArray.get(0), clientInfo.portArray.get(0));
    //                          Log.d("jyj", "다른 클라이언트에게 보내기2 server -> client1" + clientInfo.addrArray.get(0) + ", " + clientInfo.portArray.get(0));
                            }
                            try {
                                System.out.println("보내기 2 작동");
                                receiveSocket.send(recvPacket2);
                            } catch (IOException e) {
                                e.printStackTrace();
                            }
    //                      Log.d("juho", "SendMessage to Surface");
                        }
                    }
                }
            }
    }
    

    서버를 구축하고 있는데, 서버를 오픈했다가 종료하면 포트를 이미 사용중이어서 같은포트로 연결을 할수가 없습니다. 서버 오픈전 포트를 사용중인지 체크하고 강제로 종료하는 코드를 짜야할것같은데, 도저히 어디서부터 손을 대야할지 모르겠습니다ㅠ 고수님들께서 좀 도와주십시오ㅠ여기에 코드를 입력하세요

  • 프로필 알 수 없는 사용자님의 편집
    날짜2017.07.18

    자바 소켓프로그래밍 서버 포트 관련 질문입니다.


    package DHSserver;

    import info.ClientInfo;

    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.nio.ByteBuffer; import java.nio.ByteOrder; import java.util.Arrays;

    public class Server {

    public DatagramSocket servSocket;
    private DatagramSocket receiveSocket;
    private int recvPort = 8003; //8002 -> 8003
    private int port = 9210; // 8000 -> 9211
    private DatagramPacket recvPacket;
    private DatagramPacket recvPacket2;
    String myAddr;
    byte[] recvBuffer = new byte[128];
    byte[] sendBuffer = new byte[128];
    byte[] pingTestBuffer = new byte[128];
    boolean isConnect = false;
    int count = 0;
    
    InetAddress clntAddr = null;
    private int clntPort;
    private DatagramPacket sendIdPacket;
    private DatagramPacket sendIdPacket2;
    ClientInfo clientInfo;
    
    
    public Server(ClientInfo clientInfo) throws SocketException{
        //servSocket = new DatagramSocket(recvPort);
        servSocket = new DatagramSocket();
        servSocket.setReuseAddress(true);
        servSocket.setBroadcast(true);
        servSocket = new DatagramSocket(new InetSocketAddress(recvPort));
    
    
        myAddr = clientInfo.myAddr;
        recvBuffer = new byte[128];
        recvPacket = new DatagramPacket(recvBuffer, recvBuffer.length);
        receiveSocket = new DatagramSocket(port);
    
        System.out.println("서버 생성자 실행");
    }
    
    public void ServerOn(){
        System.out.println("서버 온");
    
        Thread thread = new Thread(new Runnable() {
            @Override
            public void run() {
                try {
                    while (!isConnect) {
                        if (count == 0) {
                            receiveSocket.receive(recvPacket);
                            clntAddr = recvPacket.getAddress();
                            clntPort = recvPacket.getPort();
                            System.out.println("클라이언트 IP = " + clntAddr );
                            System.out.println("클라이언트 PORT = " + clntPort);
    
                            String recvString = new String(recvPacket.getData(), 0, recvPacket.getLength());
                            sendBuffer = IntToByte(2); // ID값 지정
                            sendIdPacket = new DatagramPacket(sendBuffer, sendBuffer.length, clntAddr, clntPort);
                            receiveSocket.send(sendIdPacket);
    
                            isConnect = true;
                        }
    
                        else if (count == 1) {
                            //Log.d("juho", "ServerUserUDP - serverSocket while 2");
                            port = port + 10;
                            recvPacket2 = new DatagramPacket(recvBuffer, recvBuffer.length);
    

    // receiveSocket2 = new DatagramSocket(port); // receiveSocket2.receive(recvPacket2); receiveSocket.receive(recvPacket2); clntAddr = recvPacket2.getAddress(); clntPort = recvPacket2.getPort();

                            String recvString = new String(recvPacket2.getData(), 0, recvPacket2.getLength());
                            //recvPacket2 = new DatagramPacket(recvPacket2.getData(), recvPacket2.getData().length, clntAddr, clntPort);
                            recvPacket2.setData(recvBuffer);
                            sendBuffer = IntToByte(4);
    

    // recvPacket2 = new DatagramPacket(recvPacket2.getData(), recvPacket2.getData().length, clntAddr, clntPort); sendIdPacket2 = new DatagramPacket(sendBuffer, sendBuffer.length, clntAddr, clntPort); // Log.d("jyj", "-------------"+recvPacket2.getData()); // receiveSocket2.send(recvPacket2); receiveSocket.send(sendIdPacket2);

                            isConnect = true;
                        }
                    }
    
                    //다중 연결을 위해 값 변경
                    if (count != 1) {
                        isConnect = false;
                    } else {
                        isConnect = true;
                    }
    
                } catch (SocketException e) {
                    e.printStackTrace();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        });
        thread.start();
    
        while (clntAddr == null) {
            //Log.d("juho", "와일문 대기중");
            try {
                Thread.sleep(2000);  //3초에서 2초로 수정함
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
        byte[] tempBuffer = new byte[9];
        if (count == 0) {
            //Log.d("jyj","패킷 값"+ recvPacket.getData());
            System.arraycopy(recvPacket.getData(), 9, tempBuffer, 0, 9);
            //InetAddress clntUserAddr = InetAddress.getByName(new String(tempBuffer));
            //Log.d("jyj", "실행확인1");
        } else {
            System.arraycopy(recvPacket2.getData(), 9, tempBuffer, 0, 9);
            //InetAddress clntUserAddr = InetAddress.getByName(new String(tempBuffer));
            //Log.d("jyj", "실행확인2");
        }
    
        //    Log.d("juho", "ServerUserUDP - be received client addr = " + clntUserAddr.getHostAddress());
    
        tempBuffer = new byte[4];
        if (count == 0) {
            System.arraycopy(recvPacket.getData(), 18, tempBuffer, 0, 4);
            //int clntUserPort = ByteToInt(tempBuffer);
        } else {
            System.arraycopy(recvPacket2.getData(), 18, tempBuffer, 0, 4);
            //int clntUserPort = ByteToInt(tempBuffer);
        }
        //    Log.d("juho", "ServerUserUDP - be received client port = " + clntUserPort);
    
    
        if (count == 0) {
            clientInfo = new ClientInfo(clntAddr, clntPort);
        } else {
            clientInfo.addrArray.add(clntAddr);
            clientInfo.portArray.add(clntPort);
        }
    
        count++;
        clntAddr = null;
        //return clientInfo;
    }
    
    // int -> byte 변환하는 함수
    private static byte[] IntToByte(final int integer){
        ByteBuffer buff = ByteBuffer.allocate(Integer.SIZE / 8);
        buff.putInt(integer);
        buff.order(ByteOrder.BIG_ENDIAN);
    
        return buff.array();
    
    }
    
    private static int byteToInt(byte[] bytes) {
        final int size = Integer.SIZE / 8;
        ByteBuffer buff = ByteBuffer.allocate(size);
        final byte[] newBytes = new byte[size];
        for(int i = 0; i< size; i++) {
            if (i + bytes.length < size) {
            newBytes[i] = (byte) 0x00;
            } else {
                newBytes[i] = bytes[i + bytes.length - size];
            }
        }
        buff = ByteBuffer.wrap(newBytes);
        buff.order(ByteOrder.BIG_ENDIAN);
        return buff.getInt();
    
    }
    
    
    
    
    
        public void waitClientData(int num){
            while (true) {
                // receive
                byte[] sendBuffer = new byte[128];  //jun test
    
                if (num == 0) {
                    DatagramPacket receivePacket = new DatagramPacket(recvBuffer, recvBuffer.length);
    

    // Log.d("juho", "ServerUserUDP - Receive Wait in Server.."); try { System.out.println("waiting ClientData1"); receiveSocket.receive(receivePacket); System.out.println("Receive Complete ClientData.."+ receivePacket.getAddress() + ", " + receivePacket.getPort()); } catch (IOException e) { e.printStackTrace(); System.out.println("오류"); }

    // Log.d("jyj", "받아온 패킷값 확인 : " + Arrays.toString(receivePacket.getData())); System.out.println("데이터 값 확인 : " + Arrays.toString(receivePacket.getData()));

    // Log.d("juho", "ServerUserUDP - Addr = " + receivePacket.getAddress() + ", port = " + receivePacket.getPort()); clntPort = receivePacket.getPort(); byte[] byteMode = new byte[4]; byte[] byteData = new byte[12]; byte[] getDataT; byte[] setUser = new byte[4]; //jun test int userid; //juntest getDataT = receivePacket.getData(); for (int i = 0; i < 4; i++) { byteMode[i] = getDataT[i]; sendBuffer[i] = getDataT[i]; } for (int i = 4; i < 16; i++) { //원래 i 16까지 byteData[i - 4] = getDataT[i]; sendBuffer[i] = getDataT[i]; // Log.d("jyj","byteData값 확인"+(i-4)+"번째"+ byteData[i-4]); }

                    for (int i = 12; i < 16; i++) {
                        setUser[i - 12] = getDataT[i];
                    }
                    userid = byteToInt(setUser);
                    System.out.println("유저 ID값 확인" + userid);
    

    // setUser = IntToByte(3); // for(int i = 12; i<16; i++) // { // byteData[] // sendBuffer[i] = setUser[i-12]; // }

                    // 이 파일에서 보내는 Message는 SurFaceTest에 보내짐
                    // SurFaceTest에서는 onTouchMessage로 보냄
    

    // Message msg = new Message(); // Log.d("juho", "Mode From Server = " + ByteToInt(byteMode)); // msg.what = ByteToInt(byteMode); // TouchMove // // msg.obj = byteData; // Top_handler.sendMessage(msg); System.out.println("ClientInfo 사이즈 : " + clientInfo.addrArray.size()); if (clientInfo.addrArray.size() == 2) { if (userid == 2) { recvPacket = new DatagramPacket(sendBuffer, sendBuffer.length, clientInfo.addrArray.get(1), clientInfo.portArray.get(1)); //Log.d("jyj", "다른 클라이언트에게 보내기 server -> client2 : " + clientInfo.addrArray.get(1) + ", " + clientInfo.portArray.get(1)); } else if (userid == 4) { recvPacket = new DatagramPacket(sendBuffer, sendBuffer.length, clientInfo.addrArray.get(0), clientInfo.portArray.get(0)); //Log.d("jyj", "다른 클라이언트에게 보내기 server -> client1" + clientInfo.addrArray.get(0) + ", " + clientInfo.portArray.get(0)); } try { // receiveSocket2.send(recvPacket); System.out.println("보내기 1 작동"); receiveSocket.send(recvPacket); } catch (IOException e) { e.printStackTrace(); } } } // Log.d("juho", "SendMessage to Surface"); else { DatagramPacket waitPacket2 = new DatagramPacket(recvBuffer, recvBuffer.length); //Log.d("juho", "ServerUserUDP - Receive Wait in Server.."); try { System.out.println("waiting ClientData2"); // Log.d("juho", "ServerUserUDP - waiting ClientData..");

    // receiveSocket2.receive(waitPacket2); receiveSocket.receive(waitPacket2);

    // Log.d("juho", "ServerUserUDP - Receive Complete ClientData.."+ receivePacket.getAddress() + ", " + receivePacket.getPort()); // Log.d("juho", "ServerUserUDP - " ); } catch (IOException e) { e.printStackTrace(); } // Log.d("jyj", "서버 리시브 패킷 데이터값1 : " + waitPacket2.getData()); // Log.d("juho", "ServerUserUDP - Addr = " + waitPacket2.getAddress() + ", port = " + waitPacket2.getPort()); clntPort = waitPacket2.getPort(); byte[] byteMode2 = new byte[4]; byte[] byteData2 = new byte[12]; byte[] getDataT2; byte[] setUser2 = new byte[4]; //jun test int userid2; //juntest getDataT2 = waitPacket2.getData(); for (int i = 0; i < 4; i++) { byteMode2[i] = getDataT2[i]; sendBuffer[i] = getDataT2[i]; } for (int i = 4; i < 16; i++) { byteData2[i - 4] = getDataT2[i]; sendBuffer[i] = getDataT2[i]; }

                    for (int i = 12; i < 16; i++) {
                        setUser2[i - 12] = getDataT2[i];
                    }
                    userid2 = byteToInt(setUser2);
                    System.out.println("유저 ID값 확인" + userid2);
    
                    // 이 파일에서 보내는 Message는 SurFaceTest에 보내짐
                    // SurFaceTest에서는 onTouchMessage로 보냄
    

    // Message msg = new Message(); // Log.d("juho", "Mode From Server = " + ByteToInt(byteMode2)); // msg.what = ByteToInt(byteMode2); // TouchMove // // msg.obj = byteData2; // Top_handler.sendMessage(msg);

                    if (clientInfo.addrArray.size() == 2) {
                        if (userid2 == 2) {
                            recvPacket2 = new DatagramPacket(sendBuffer, sendBuffer.length, clientInfo.addrArray.get(1), clientInfo.portArray.get(1));
    

    // Log.d("jyj", "다른 클라이언트에게 보내기2 server -> client2" + clientInfo.addrArray.get(1) + ", " + clientInfo.portArray.get(1)); } else if (userid2 == 4) { recvPacket2 = new DatagramPacket(sendBuffer, sendBuffer.length, clientInfo.addrArray.get(0), clientInfo.portArray.get(0)); // Log.d("jyj", "다른 클라이언트에게 보내기2 server -> client1" + clientInfo.addrArray.get(0) + ", " + clientInfo.portArray.get(0)); } try { System.out.println("보내기 2 작동"); receiveSocket.send(recvPacket2); } catch (IOException e) { e.printStackTrace(); } // Log.d("juho", "SendMessage to Surface"); } } } } }

    서버를 구축하고 있는데, 서버를 오픈했다가 종료하면 포트를 이미 사용중이어서 같은포트로 연결을 할수가 없습니다. 서버 오픈전 포트를 사용중인지 체크하고 강제로 종료하는 코드를 짜야할것같은데, 도저히 어디서부터 손을 대야할지 모르겠습니다ㅠ 고수님들께서 좀 도와주십시오ㅠ여기에 코드를 입력하세요