다른 포트 번호를 사용하여 소켓을 만드는 동안 이미 사용중인 주소

user3761646

새 소켓을 시작하기 전에 포트 번호를 늘려도 어떤 이유로 다음 예외 (java.net.BindException : Address already in use)가 발생합니다. 이 예외는 스레드를 사용하기 전에 나에게 발생하지 않았습니다.

송신자는 파일의 일부 (새 소켓을 사용하는 각 부분)를 수신자에게 보내야합니다. 프로그램이 작동하고 스레드를 사용하지 않고 모든 부품을 받았습니다.

이제 서버가 첫 번째 소켓 이후에 소켓을 생성하지 않으므로 파일의 첫 번째 부분 만 수신자에게 수신됩니다.

또한 이러한 포트 번호는 스레딩을 사용하기 전에 모두 작동했기 때문에 사용되지 않습니다.

스레딩을 처음 사용하므로 잘못 사용하고있을 수 있습니다.

미리 감사드립니다!

서버 클래스 :

public class Server {
int port = 8500;

public Server(int x) {
    for (int i = 0; i < x; i++) {
        ServerThread s = new ServerThread(port);
        s.start();
        port++;
    }

}

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

    DatagramSocket socket = new DatagramSocket(7499);
    byte[] buffer = new byte[256];
    DatagramPacket receivePacket = new DatagramPacket(buffer, buffer.length);
    socket.receive(receivePacket);
    String message = new String(buffer, 0, receivePacket.getLength());
    int xyz = Integer.parseInt(message);
    socket.close();
    Server server = new Server(xyz);

    try {
        FileJoin f = new FileJoin();
    } catch (Exception e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    System.exit(0);
}

} ServerThread 클래스 :

 public class ServerThread extends Thread {
private FileEvent fileEvent1 = null;
private int port;

ServerThread(int port) {

    this.port = port;
    run();
}

public void run() {
    try {
        createAndListenSocket(this.port);
    } catch (ClassNotFoundException | InterruptedException | IOException e) {

        e.printStackTrace();
    }
}

public void createAndListenSocket(int portx) throws InterruptedException,
        IOException, ClassNotFoundException {

    DatagramSocket socket1 = new DatagramSocket(portx);

    byte[] incomingData1 = new byte[1024 * 1000 * 50];

    DatagramPacket incomingPacket1 = new DatagramPacket(incomingData1,
            incomingData1.length);

    socket1.receive(incomingPacket1);

    byte[] data1 = incomingPacket1.getData();

    ByteArrayInputStream in1 = new ByteArrayInputStream(data1);

    ObjectInputStream is1 = new ObjectInputStream(in1);

    fileEvent1 = (FileEvent) is1.readObject();

    if (fileEvent1.getStatus(0).equalsIgnoreCase("Error")) {

        System.exit(0);

    }

    createAndWriteFile(); // writing the file to hard disk

    InetAddress IPAddress = incomingPacket1.getAddress();

    int porty = incomingPacket1.getPort();

    String reply = "The file was successfuly saved. ";

    byte[] replyBytea = reply.getBytes();

    DatagramPacket replyPacket =

    new DatagramPacket(replyBytea, replyBytea.length, IPAddress, porty);

    socket1.send(replyPacket);

    Thread.sleep(3000);

}

public void createAndWriteFile() {
    String outputFile1 = fileEvent1.getDestinationDirectory(0)
            + fileEvent1.getFilename(0);

    if (!new File(fileEvent1.getDestinationDirectory(0)).exists()) {

        new File(fileEvent1.getDestinationDirectory(0)).mkdirs();

    }

    File dstFile1 = new File(outputFile1);

    FileOutputStream fileOutputStream1 = null;

    try {

        fileOutputStream1 = new FileOutputStream(dstFile1);

        fileOutputStream1.write(fileEvent1.getFileData(0));

        fileOutputStream1.flush();

        fileOutputStream1.close();

        System.out.println("Output file : " + outputFile1
                + " is successfully saved ");

    } catch (FileNotFoundException e) {

        e.printStackTrace();

    } catch (IOException e) {

        e.printStackTrace();

    }
}

}

클라이언트 클래스 :

public class Client {

private FileEvent event1 = null;
private String sourceFilePath = "D:/workspace/newUDP/Image.jpgPart";
private int filenum;
private String destinationPath = "E:/UDPreceive/";
private int port = 8500;

private String hostName = "127.0.0.1";

public Client() {

}

public void createConnection(int x) {

    try {
        InetAddress IPAddress = InetAddress.getByName(hostName);
        for (int i = 0; i < x; i++) {
            DatagramSocket socket1 = new DatagramSocket();

            byte[] incomingData = new byte[1024];

            event1 = getFileEvent(0);

            ByteArrayOutputStream outputStream = new ByteArrayOutputStream();

            ObjectOutputStream os = new ObjectOutputStream(outputStream);

            os.writeObject(event1);

            byte[] data = outputStream.toByteArray();

            DatagramPacket sendPacket1 = new DatagramPacket(data,
                    data.length, IPAddress, port);

            socket1.send(sendPacket1);

            System.out.println("File sent from client");

            DatagramPacket incomingPacket = new DatagramPacket(
                    incomingData, incomingData.length);

            socket1.receive(incomingPacket);

            String response = new String(incomingPacket.getData());

            System.out.println("Response from server:" + response);

            port++;
        }

        Thread.sleep(2000);

    } catch (UnknownHostException e) {

        e.printStackTrace();

    } catch (SocketException e) {

        e.printStackTrace();

    } catch (IOException e) {

        e.printStackTrace();
    } catch (InterruptedException e) {

        e.printStackTrace();

    }

}

public FileEvent getFileEvent(int i) {

    FileEvent fileEvent = new FileEvent();
    sourceFilePath = sourceFilePath + filenum;

    String fileName1 = sourceFilePath.substring(
            sourceFilePath.lastIndexOf("/") + 1, sourceFilePath.length());

    String path1 = sourceFilePath.substring(0,
            sourceFilePath.lastIndexOf("/") + 1);

    fileEvent.setDestinationDirectory(destinationPath, 0);

    fileEvent.setFilename(fileName1, 0);

    fileEvent.setSourceDirectory(sourceFilePath, 0);

    File file1 = new File(sourceFilePath);
    filenum++;
    sourceFilePath = "D:/workspace/newUDP/Image.jpgPart";

    if (file1.isFile()) {

        try {

            DataInputStream diStream = new DataInputStream(
                    new FileInputStream(file1));

            long len = (int) file1.length();

            byte[] fileBytes = new byte[(int) len];

            int read = 0;

            int numRead = 0;

            while (read < fileBytes.length
                    && (numRead = diStream.read(fileBytes, read,

                    fileBytes.length - read)) >= 0) {

                read = read + numRead;

            }

            fileEvent.setFileSize(len, 0);

            fileEvent.setFileData(fileBytes, 0);

            fileEvent.setStatus("Success", 0);

        } catch (Exception e) {

            e.printStackTrace();

            fileEvent.setStatus("Error", 0);

        }

    } else {

        System.out.println("path specified is not pointing to a file");

        fileEvent.setStatus("Error", 0);

    }

    return fileEvent;

}

public static void main(String[] args) throws IOException {
    try {
        FileSplit f = new FileSplit();
    } catch (Exception e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    try {
        DatagramSocket socket = new DatagramSocket();
        String xyz = "" + FileSplit.getJ();
        System.out.println(xyz);
        InetAddress serverAddress = InetAddress.getByName("127.0.0.1");

        byte[] sendBytes = xyz.getBytes();

        DatagramPacket sendPacket = new DatagramPacket(sendBytes,
                sendBytes.length, serverAddress, 7499);
        socket.send(sendPacket);
        System.out.println(xyz);
        Client client = new Client();

        client.createConnection(Integer.parseInt(xyz));
    } catch (IOException x) {

    }

    System.exit(0);
}

} 스택 추적 :

java.net.BindException: Address already in use: Cannot bind
at java.net.DualStackPlainDatagramSocketImpl.socketBind(Native Method)
at java.net.DualStackPlainDatagramSocketImpl.bind0(Unknown Source)
at java.net.AbstractPlainDatagramSocketImpl.bind(Unknown Source)
at java.net.DatagramSocket.bind(Unknown Source)
at java.net.DatagramSocket.<init>(Unknown Source)
at java.net.DatagramSocket.<init>(Unknown Source)
at java.net.DatagramSocket.<init>(Unknown Source)
at pack.ServerThread.createAndListenSocket(ServerThread.java:32)
at pack.ServerThread.run(ServerThread.java:24)
디마
  1. 여기서 스레드를 사용하지 않습니다. 생성자에서 서버를 시작합니다.
  2. 를 호출 할 때 실행 메서드의 서명이 다르기 때문에 스텁 메서드를s.start(); 호출하는 입니다. 오버로드가 아니라 재정의해야합니다 . 차이를 참조 하세요 .Thread
  3. 다른 소프트웨어도 포트를 사용할 수 있습니다. 사용하는 것이 아니라 무료인지 확인해야합니다.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

OSError 받기 : while 루프에서 트리오 소켓을 사용하는 함수를 실행하는 동안 (이미 사용중인 주소)

분류에서Dev

Tomcat이 시작되는 동안 각 소켓 주소 (프로토콜 / 네트워크 주소 / 포트)를 한 번만 사용할 수 있습니다.

분류에서Dev

이미 사용중인 주소 : JVM_Bind하지만 과정에서 netstat와 포트를 사용하여 나열하지 않습니다

분류에서Dev

일반적으로 각 소켓 주소는 한 번만 사용할 수 있습니다 (하지만 동일한 포트를 사용해야합니다 ...).

분류에서Dev

일반적으로 각 소켓 주소는 한 번만 사용할 수 있습니다 (하지만 동일한 포트를 사용해야합니다 ...).

분류에서Dev

다른 IP 주소에서 동일한 내부 포트 번호를 사용하는 라우터의 포트 포워딩

분류에서Dev

Mininet : 다중 인터페이스가있는 호스트 생성 및 addLink ()를 사용하여 IP 주소 할당

분류에서Dev

소켓을 사용하여 내 도메인의 다른 모든 IP 주소를 찾는 방법

분류에서Dev

소켓을 사용하여 원격 서버에서 열린 포트를 확인하는 것은 포트가 닫히면 중단됩니다. C

분류에서Dev

NodeJS, 포트에서 서버를 실행할 수 없음 : 수신 EADDRINUSE : 이미 사용중인 주소 ::: 3001,하지만 사용되지 않는 포트, Socket.io

분류에서Dev

zmq.error.ZMQError : papermill을 사용하여 여러 노트북에서 다중 처리를 실행할 때 이미 사용중인 주소

분류에서Dev

첫 번째 요소 만 확인하는 이중 파이프로 구분 된 인수를 사용하여 메서드를 선택합니다 ... 대안?

분류에서Dev

문서가 아닌 다른 요소를 사용하여 엉뚱한 형광펜을 만드는 동안

분류에서Dev

토렌트 사이트를 사용하는 동안 IP 주소 숨기기

분류에서Dev

응답을 위해 클라이언트 주소 및 포트를 이용하는 Python 소켓

분류에서Dev

c # udp 소켓 통신-각 소켓 주소 (프로토콜 / 네트워크 주소 / 포트)는 일반적으로 한 번만 사용할 수 있습니다.

분류에서Dev

ElementNotInteractableException : 메시지 : Selenium Python을 사용하여 검색 필드에 텍스트를 보내는 동안 요소 상호 작용이 불가능합니다.

분류에서Dev

c #에서는 일반적으로 각 소켓 주소 (프로토콜 / 네트워크 주소 / 포트)를 한 번만 사용할 수 있습니다.

분류에서Dev

Unity 멀티 캐스트 UDP 소켓을 사용하여 데이터 동기화를 개선하는 방법

분류에서Dev

동일한 PC에서 Java 소켓을 사용하여 파일을 전송할 때 "BindException : 이미 사용중인 주소"예외

분류에서Dev

소켓을 사용하여 다른 컴퓨터에서 내 Python 콘솔로 오는 주문 데이터

분류에서Dev

nginx : [emerg] bind () to 0.0.0.0:80 실패 (98 : 이미 사용중인 주소) 포트 80을 사용하여 프로세스를 종료 한 후에도

분류에서Dev

select ()를 사용하는 동안 두 번째 소켓이있는 서버에 연결하는 이유는 첫 번째 연결을 "중단"합니까?

분류에서Dev

IP 주소를 사용하여 동일한 서버에 여러 도메인이있는 웹 사이트 방문

분류에서Dev

개인 레지스트리의 이미지를 사용하여 포드를 배포하는 동안 CrashLoopBackOff

분류에서Dev

Postfix 시작 오류 포트 25 : 이미 사용중인 주소

분류에서Dev

Postfix 시작 오류 포트 25 : 이미 사용중인 주소

분류에서Dev

Rvest를 사용하여 웹 사이트에서 <p> 및 <span> 요소를 추출하는 동안 중단됨

분류에서Dev

PHP CURL을 사용하여 양식 데이터를 게시하는 동안 클라이언트 IP 주소 사용

Related 관련 기사

  1. 1

    OSError 받기 : while 루프에서 트리오 소켓을 사용하는 함수를 실행하는 동안 (이미 사용중인 주소)

  2. 2

    Tomcat이 시작되는 동안 각 소켓 주소 (프로토콜 / 네트워크 주소 / 포트)를 한 번만 사용할 수 있습니다.

  3. 3

    이미 사용중인 주소 : JVM_Bind하지만 과정에서 netstat와 포트를 사용하여 나열하지 않습니다

  4. 4

    일반적으로 각 소켓 주소는 한 번만 사용할 수 있습니다 (하지만 동일한 포트를 사용해야합니다 ...).

  5. 5

    일반적으로 각 소켓 주소는 한 번만 사용할 수 있습니다 (하지만 동일한 포트를 사용해야합니다 ...).

  6. 6

    다른 IP 주소에서 동일한 내부 포트 번호를 사용하는 라우터의 포트 포워딩

  7. 7

    Mininet : 다중 인터페이스가있는 호스트 생성 및 addLink ()를 사용하여 IP 주소 할당

  8. 8

    소켓을 사용하여 내 도메인의 다른 모든 IP 주소를 찾는 방법

  9. 9

    소켓을 사용하여 원격 서버에서 열린 포트를 확인하는 것은 포트가 닫히면 중단됩니다. C

  10. 10

    NodeJS, 포트에서 서버를 실행할 수 없음 : 수신 EADDRINUSE : 이미 사용중인 주소 ::: 3001,하지만 사용되지 않는 포트, Socket.io

  11. 11

    zmq.error.ZMQError : papermill을 사용하여 여러 노트북에서 다중 처리를 실행할 때 이미 사용중인 주소

  12. 12

    첫 번째 요소 만 확인하는 이중 파이프로 구분 된 인수를 사용하여 메서드를 선택합니다 ... 대안?

  13. 13

    문서가 아닌 다른 요소를 사용하여 엉뚱한 형광펜을 만드는 동안

  14. 14

    토렌트 사이트를 사용하는 동안 IP 주소 숨기기

  15. 15

    응답을 위해 클라이언트 주소 및 포트를 이용하는 Python 소켓

  16. 16

    c # udp 소켓 통신-각 소켓 주소 (프로토콜 / 네트워크 주소 / 포트)는 일반적으로 한 번만 사용할 수 있습니다.

  17. 17

    ElementNotInteractableException : 메시지 : Selenium Python을 사용하여 검색 필드에 텍스트를 보내는 동안 요소 상호 작용이 불가능합니다.

  18. 18

    c #에서는 일반적으로 각 소켓 주소 (프로토콜 / 네트워크 주소 / 포트)를 한 번만 사용할 수 있습니다.

  19. 19

    Unity 멀티 캐스트 UDP 소켓을 사용하여 데이터 동기화를 개선하는 방법

  20. 20

    동일한 PC에서 Java 소켓을 사용하여 파일을 전송할 때 "BindException : 이미 사용중인 주소"예외

  21. 21

    소켓을 사용하여 다른 컴퓨터에서 내 Python 콘솔로 오는 주문 데이터

  22. 22

    nginx : [emerg] bind () to 0.0.0.0:80 실패 (98 : 이미 사용중인 주소) 포트 80을 사용하여 프로세스를 종료 한 후에도

  23. 23

    select ()를 사용하는 동안 두 번째 소켓이있는 서버에 연결하는 이유는 첫 번째 연결을 "중단"합니까?

  24. 24

    IP 주소를 사용하여 동일한 서버에 여러 도메인이있는 웹 사이트 방문

  25. 25

    개인 레지스트리의 이미지를 사용하여 포드를 배포하는 동안 CrashLoopBackOff

  26. 26

    Postfix 시작 오류 포트 25 : 이미 사용중인 주소

  27. 27

    Postfix 시작 오류 포트 25 : 이미 사용중인 주소

  28. 28

    Rvest를 사용하여 웹 사이트에서 <p> 및 <span> 요소를 추출하는 동안 중단됨

  29. 29

    PHP CURL을 사용하여 양식 데이터를 게시하는 동안 클라이언트 IP 주소 사용

뜨겁다태그

보관