소켓은 통신의 극점을 뜻한다. 각 소켓은 IP주소와 Port번호를 접합해서 구별한다.
java는 소켓에 대한 사용하기 쉬운 인터페이스를 제공한다.
서버는 ServerSocket
을 만들어 client의 요청을 기다린다.
요청이 들어오면 sock.accept()
를 호출하여 client와 연결한다.
연결된 socket
을 이용하여 데이터를 주고 받는다.
import java.net.*;
import java.io.*;
public class DateServer {
public static void main(String[] args){
System.out.println("Listening...");
try{
ServerSocket sock = new ServerSocket(7048);
while(true){
Socket client = sock.accept();
System.out.println("Connected!");
PrintWriter pout = new PrintWriter(client.getOutputStream(), true);
pout.println(new java.util.Date().toString());
client.close();
}
}
catch (IOException ioe){
System.err.println(ioe);
}
}
}
클라이언트는 IP주소와 Port번호를 이용해 ServerSocket을 얻어온다.
그리고 서버 소켓의 버퍼로부터 데이터를 받는다.
import java.net.*;
import java.io.*;
public class DateClient {
public static void main(String[] args){
try{
Socket sock = new Socket("127.0.0.1",7048);
InputStream in = sock.getInputStream();
BufferedReader bin = new BufferedReader(new InputStreamReader(in));
String line;
while( (line=bin.readLine() )!=null){
System.out.println(line);
}
sock.close();
}
catch (IOException ioe){
System.err.println(ioe);
}
}
}
강의에서 127.0.0.1
을 자신의 ip주소로 바꿔보란 얘기를 들어서
cmd 창에서 ipconfig
명령어로 알아낸 내 주소를 대신 입력하고 코드를 작동시켰는데, 소켓 연결이 정상적으로 이뤄지지 않았다.
https://cbn1218.tistory.com/37
이 블로그를 참고하며 알게 됐는데.. 127.0.0.1
이 localhost와 매칭되는 ip주소였다.
localhost자체는 도메인 이름이고 실제 자신을 가리킬 수 있는 ip 주소는 127.0.0.1
이다.
그럼 왜 네트워크상에서 부여받은 나의 IP주소값으로는 위의 예제가 작동하지 않을까요?