자바 이클립스로 간단한 tcp 통신 연습 중입니다.
서버 코드는
package com.home.net.TCPConnection;import java.net.*;import java.io.*;import javax.swing.*;publicclassTCPServer{publicstaticvoidmain(String[] args)throws IOException {finalint port = 5004; ServerSocket server =newServerSocket(port); System.out.println("클라이언트의 연결을 기다림...");while(true){ Socket sock = server.accept();/* * 클라이언트의 접속을 기다리다가 클라이언트가 접속해 오면 * 서비스 소켓은 클라이언트와 연결된 소켓 객체를 반환해 준다. */ System.out.println("클라이언트가 접속해 옴..."); InetAddress inet = sock.getInetAddress(); String cip = inet.getHostAddress(); System.out.println("클라이언트의 IP주소 : "+ cip);// 서버는 클라이언트가 보내오는 메시지를 듣고 콘솔에 출력한다. InputStream is = sock.getInputStream(); BufferedReader in =newBufferedReader(newInputStreamReader(is));// readLine()을 이용해서 메시지 받은 뒤 콘솔에 출력하기. String cmsg = in.readLine(); System.out.println(cip +"님 >> "+ cmsg); in.close(); is.close(); sock.close();}// while---------------------------------------------------------------- }}
클라이언트 코드는
package com.home.net.TCPConnection;import java.net.*;import java.io.*;import javax.swing.*;publicclassTCPClient{publicstaticvoidmain(String[] args)throws IOException, IOException {// 서버의 ip주소, 포트번호가 필요함. String ip ="192.168.219.100";finalint port = 5004; Socket sock =newSocket(ip, port); System.out.println("서버와 연결됨..."); String msg = JOptionPane.showInputDialog("서버에게 보낼 메시지를 입력하세요.");if(msg == null){return;} OutputStream os = sock.getOutputStream(); PrintWriter pout =newPrintWriter(os,true);// 서버에 메시지를 보내자. pout.println(msg); pout.close(); os.close(); sock.close();}}
물론 int port 변수에, 데스크탑에는 노트북의 IP를, 노트북에는 데스크탑의 IP를 넣어줍니다.
이 코드를 데스크탑과 노트북에서 각자 코딩하고, 먼저 서버를 실행시키면
"클라이언트의 연결을 기다림"이 뜹니다.
그 후 클라이언트를 실행시키면
노트북 쪽에서는 String msg = JOptionPane.showInputDialog 가 동작하여 데스크탑 쪽으로 메시지를 보낼 수 있습니다.
그런데 데스크탑 쪽에서는 아래와 같은 에러가 나며 접속이 안됩니다.
Exception in thread "main" java.netConnectException: Connection timed out: connect
at java.net.DualStackPlainSocketImpl.connect0(Native Method)
at java.net.DualStackPlainSocketImpl.socketConnect(DualStackPlainSocketImpl.java:79)
at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350)
at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206)
at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188)
at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:172)
at java.netSocksSocketImpl.connect(SocksSocketImpl.java:392)
at java.net.Socket.connect(Socket.java:606)
at java.net.Socket.connect(Socket.java:555)
at java.net.Socket.<init>(Socket.java:451)
at java.net.Socket.<init>(Socket.java:228)
at TCP01.TCPClient.main(TCPClient.java:14)
에러의 마지막 줄인 TCPClient.java : 14번 라인은
Socket sock = new Socket(ip, port); 이겁니다.
데스크탑이나 노트북이나 완전히 똑같은 코드를 사용하는데 데스크탑 쪽에서만 노트북 쪽으로 접속이 안됩니다.
뭐가 문제일까요?
방화벽도 검색해서 포트도 열어 봤는데 안되어서 질문 드립니다.
어떻게 열어야 할까요?
이거 보고 코드에 있는 5004포트를 노트북쪽 인바운드에 추가해 봤는데 안되어서.....
방화벽은 어떻게 열어야 할까요?