오라클자바커뮤니티에서 설립한 오엔제이프로그래밍 실무교육센터
(신입사원채용무료교육, 오라클SQL, 튜닝, 힌트,자바프레임워크, 안드로이드, 아이폰, 닷넷)
Socket
클라이언트/서버 네트웍에서 서버는 데이터베이스에 질의를 수행해서 어떤 결과를 클라이언트에 보낸다든지 또는 현재 주식 시세를 확인 후 클라이언트에 보낸다든지 하는 일련의 서비스를 제공 합니다. 이때 클라이언트와 서버의 통신은 신뢰 할 수 있어야 하며 서버에서 보낸 데이터는 소실되거나 순서가 바귀어서는 안되는게 상식 이겠죠? TCP는 point-to-point(종단간)간의 통신에 있어 신뢰할 수 있는 서비스를 제공하며 TCP상에서 서로 통신을 하기 위해서는 양쪽이 먼저 연결을 수립한 후 통신을 하게 되는 것입니다. 또한 통신을 하기 위해 클라이언트와 서버는 연결에 바운딩된 소켓에 쓰거나 소켓을 통해 데이터를 읽을 수가 있는 것입니다. 결국 소켓(Socket)은 통신을 위한 양쪽 종단의 끝을 가리키는 것으로 Socket 클래스는 결국 클라이언트 프로그램과 서버 프로그램 사이의 연결 종단을 나타내기 위해 사용한다고 볼 수 있습니다. java.net 패키지는 연결의 클라이언트 쪽과 서버 쪽을 표현하기 위해 Socket 과 ServerSocket 두개의 클래스를 포함하고 있으며 우리는 앞으로 이두개의 클래스에 대해 자세히 보도록 할 것입니다.
소켓을 생성하면 연결은 자동으로 이루어지며, 연결 할때 오류가 발생하면 IOException 이 발생 합니다.TCP 연결에는 로컬 IP 주소와 원격 IP 주소 , 로컬포트 , 원격 포트 등이 사용되며 Socket 이 생성되어 원격호스 트에 접속 할 때 대개는 사용하지 않는 로컬 포트가 사용 됩니다.
생성자
• Constructor – public Socket(InetAddress address, int port)
• Creates a stream socket and connects it to the specified port number at the specified IP address. – public Socket(String host, int port)
• Creates a stream socket and connects it to the specified port number on the named host.
[예제]
//The Echo server is a well-known service that clients can rendezvous with on port 7.
import java.net.*;
import java.io.*;
public class EchoLoopClient {
public static void main(String [] args) {
Socket mySocket;
String hostName, aLine;
BufferedReader fromSocket, userInput;
PrintWriter toSocket;
try {
if(args.length > 0) hostName = args[0];
else hostName = "127.0.0.1";
mySocket = new Socket(hostName, 7);
fromSocket = new BufferedReader(new InputStreamReader(mySocket.getInputStream()));
toSocket = new PrintWriter(mySocket.getOutputStream());
userInput = new BufferedReader(new InputStreamReader(System.in));
while(true) {
aLine = userInput.readLine();
if (aLine.equals(".")) break;
toSocket.println(aLine);
toSocket.flush();
System.out.println(fromSocket.readLine());
}
fromSocket.close();
toSocket.close();
}
catch(UnknownHostException e) {
System.out.println(e);
}
catch(Exception e) {
System.out.println(e);
}
}
}
댓글 없음:
댓글 쓰기