NGMsoftware

NGMsoftware
로그인 회원가입
  • 매뉴얼
  • 학습
  • 매뉴얼

    학습


    Error java.net.SocketException: already connected

    페이지 정보

    본문

    C# 소켓 프로그램을 Java로 포팅하던중 "java.net.SocketException: already connected"와 같은 에러가 발생 했습니다. C#은 아래와 같이 소켓을 연결하는데요.

    Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
    
    // 소켓을 닫을 때 필요한 정보
    IPEndPoint remoteEndPoint = new IPEndPoint(IPAddress.Parse(ip), port);
    
    // 연결
    socket.BeginConnect(remoteEndPoint, new AsyncCallback(Connected), socket);

     

    자바에서 C#과 비슷하게 소켓 인스턴스를 만들고, 아래에서 connect 메소드를 호출하면 에러가 발생합니다.

    Socket socket = new Socket(ip, port);
    SocketAddress address = new InetSocketAddress(ip, port);
    socket.connect(address);

     

    자바는 인스턴스를 만들 때 인자로 아이피와 포트를 넘겨받는데요. 이 때 이미 연결된 상태입니다. 그래서, 코드를 아래와 같이 약간 변경해서 처리 했습니다.

    Socket socket = new Socket(ip, port);
    
    if (!socket.isConnected()) {
        SocketAddress address = new InetSocketAddress(ip, port);
        socket.connect(address);
    }

     

    Socket 클래스를 보면 기본 생성자도 있습니다. 그래서, 위 코드에서 소켓 인스턴스를 만들 때 아이피와 포트를 넘기지 않고 그냥 만들면 문제가 해결됩니다.

    // Method descriptor #34 ()V
    // Stack: 3, Locals: 1
    public Socket();

     

    개발자에게 후원하기

    MGtdv7r.png

     

    추천, 구독, 홍보 꼭~ 부탁드립니다.

    여러분의 후원이 빠른 귀농을 가능하게 해줍니다~ 답답한 도시를 벗어나 귀농하고 싶은 개발자~

    감사합니다~

    • 네이버 공유하기
    • 페이스북 공유하기
    • 트위터 공유하기
    • 카카오스토리 공유하기
    추천0 비추천0

    댓글목록

    등록된 댓글이 없습니다.