none
TcpClient 객체를 IPEndPoint를 이용하여 인스턴스화 하는 경우, 연결이 되지 않는 문제 RRS feed

  • 질문

  • 예를 들어, TcpClient tc = new TcpClient("localhost",1234);

    와 같이 사용하면 정상 연결이 되지만, TcpClient tc = new TcpClient(new IPEndPoint(ip,7000));

    와 같이 객체를 생성하면 네트워크 스트림 등을 가져오려고 할 때 소켓이 없다는 예외가 발생합니다..

    TcpClient의 Conntect(ip,port) 메서드를 이용해서 연결을 생성하면 정상 작동을 하는데, 어떤 문제가 있어서 위의 코드가 동작하지 않는지 궁금합니다.

    2018년 1월 21일 일요일 오전 5:33

답변

  • 안녕하세요.


    TcpClient Constructor (IPEndPoint) 의 설명을 보면, 사용법에 문제가 있어 보입니다. 아래의 문서를 참조하여 보시기 바랍니다.
    https://msdn.microsoft.com/en-us/library/3bsb3c8f(v=vs.110).aspx
    TcpClient Constructor (IPEndPoint)

    This constructor creates a new TcpClient and binds it to the IPEndPoint specified by the localEP parameter. Before you call this constructor, you must create an IPEndPoint using the IP address and port number from which you intend to send and receive data. You do not need to specify a local IP address and port number before connecting and communicating. If you create a TcpClient using any other constructor, the underlying service provider will assign the most appropriate local IP address and port number.

    You must call the Connect method before sending and receiving data.

    Examples
    //Creates a TCPClient using a local end point.
    IPAddress ipAddress = Dns.GetHostEntry (Dns.GetHostName ()).AddressList[0];
    IPEndPoint ipLocalEndPoint = new IPEndPoint(ipAddress, 0);
    TcpClient tcpClientA = new TcpClient (ipLocalEndPoint);


    그래서 다음과 같은 예제처럼 사용을 하여 보면 어떨까 합니다.
    //Example was taken from MSDN TCPClient Constructor with IPEndPoint parameter
    //Creates a TCPClient using a local end point.
    IPAddress ipAddress = Dns.GetHostEntry (Dns.GetHostName ()).AddressList[0];
    IPEndPoint ipLocalEndPoint = new IPEndPoint(ipAddress, 0);
    TcpClient tcpClientA = new TcpClient (ipLocalEndPoint);

    //Later you can connect to the remote machine using
    IPEndPoint remoteEndpoint new IPEndPoint(yourRemoteIPAdress, yourRemotePort);
    tcpClientA.Connect(remoteEndPoint);

    도움이 되었으면 합니다.

    감사합니다.

    2018년 1월 23일 화요일 오전 7:47

모든 응답

  • 안녕하세요.


    TcpClient Constructor (IPEndPoint) 의 설명을 보면, 사용법에 문제가 있어 보입니다. 아래의 문서를 참조하여 보시기 바랍니다.
    https://msdn.microsoft.com/en-us/library/3bsb3c8f(v=vs.110).aspx
    TcpClient Constructor (IPEndPoint)

    This constructor creates a new TcpClient and binds it to the IPEndPoint specified by the localEP parameter. Before you call this constructor, you must create an IPEndPoint using the IP address and port number from which you intend to send and receive data. You do not need to specify a local IP address and port number before connecting and communicating. If you create a TcpClient using any other constructor, the underlying service provider will assign the most appropriate local IP address and port number.

    You must call the Connect method before sending and receiving data.

    Examples
    //Creates a TCPClient using a local end point.
    IPAddress ipAddress = Dns.GetHostEntry (Dns.GetHostName ()).AddressList[0];
    IPEndPoint ipLocalEndPoint = new IPEndPoint(ipAddress, 0);
    TcpClient tcpClientA = new TcpClient (ipLocalEndPoint);


    그래서 다음과 같은 예제처럼 사용을 하여 보면 어떨까 합니다.
    //Example was taken from MSDN TCPClient Constructor with IPEndPoint parameter
    //Creates a TCPClient using a local end point.
    IPAddress ipAddress = Dns.GetHostEntry (Dns.GetHostName ()).AddressList[0];
    IPEndPoint ipLocalEndPoint = new IPEndPoint(ipAddress, 0);
    TcpClient tcpClientA = new TcpClient (ipLocalEndPoint);

    //Later you can connect to the remote machine using
    IPEndPoint remoteEndpoint new IPEndPoint(yourRemoteIPAdress, yourRemotePort);
    tcpClientA.Connect(remoteEndPoint);

    도움이 되었으면 합니다.

    감사합니다.

    2018년 1월 23일 화요일 오전 7:47
  • 감사합니다!

    2018년 1월 29일 월요일 오후 3:41