본문 바로가기

Programming Language/Java

자바로 소켓 사용하는 예

336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

서버측 소스

/* Server.java */
/* Socket 클래스를 사용하기 위한 패키지 import */
import java.net.*;
/* 데이터의 입출력 관련 클래스를 사용하기 위한 패키지 import */
import java.io.*;

public class Server
{
	public static void main(String[] args) throws IOException
	{
		ServerSocket serverSocket = null; // 서버용 대기 소켓
		Socket socket = null; // 데이터 교환 소켓
		DataInputStream dataInputStream = null; // 클라이언트로부터 데이터를 받기 위한 스트림
		DataOutputStream dataOutputStream = null; // 클라이언트에게 데이터를 주기 위한 스트림

		try
		{
			serverSocket = new ServerSocket(1234); // 1234번 포트로 서버 소켓 시작

			/* 무한루프를 돌며 클라이언트의 요청이 들어올때마다 작업 수행 */
			while(true)
			{
				/* accept 메서드: 클라이언트의 요청이 있을 때까지 무제한 대기 */
				System.out.println("접속 대기 ...\n");
				socket = serverSocket.accept();

				/* 클라이언트의 요청이 들어오면 InputStream과 OutputStream 가져오기 */
 				dataInputStream = new DataInputStream(socket.getInputStream());
				dataOutputStream = new DataOutputStream(socket.getOutputStream());

				// TODO: Server가 해야 할 일의 예
				while(true)
				{
					try
					{
						/* dataInputStream.readXXX 메서드로 데이터 읽어오기 시도 */
						System.out.printf("Server: received %s\n", dataInputStream.readUTF());
					}
					catch(Exception e)
					{
						/* 클라이언트가 접속을 종료했으면 예외로 처리되어 여기로 넘어옴. 특정 클라이언트에 대한 무한 루프 종료 */
						break;
					}
				}
			}
		}
		catch(IOException e)
		{
			throw e;
		}
		finally
		{
			/* 소켓 사용 중 예외가 발생했거나 더 이상 수행할 내용이 없을 때 소켓 종료 */
			if(serverSocket != null) serverSocket.close();
		}
	}
}

클라이언트측 소스의 경우

/* Client.java */
/* Socket 클래스를 사용하기 위한 패키지 import */
import java.net.*;
/* 데이터의 입출력 관련 클래스를 사용하기 위한 패키지 import */
import java.io.*;

public class Client
{
	public static void main(String[] args) throws IOException
	{
		Socket socket = null; // 서버 접속을 위한 소켓
		DataInputStream dataInputStream = null; // 서버로부터 전달되는 데이터를 읽는 스트림
		DataOutputStream dataOutputStream = null; // 서버로 데이터를 보내는 스트림

		try
		{
			/* Socket 생성자: IP주소, 포트 번호 */
			socket = new Socket("127.0.0.1", 1234);

			/* 입출력 스트림 얻기 */
			dataInputStream = new DataInputStream(socket.getInputStream());
			dataOutputStream = new DataOutputStream(socket.getOutputStream());

			// TODO: Client가 해야 할 작업의 예
			/* 서버로 Hello, World 문자열을 보낸다. */
			dataOutputStream.writeUTF("Hello, World!");
		}
		catch(IOException e)
		{
			throw e;
		}
		finally
		{
			if(socket != null) socket.close();
		}
	}
}

'Programming Language > Java' 카테고리의 다른 글

Java의 XML 읽기/쓰기 (DOM 버전)  (0) 2015.01.06
Java AWT로 메뉴 넣기  (0) 2014.09.08
Java AWT로 창 닫기 구현하기  (1) 2014.09.07
Java AWT로 빈 프레임 띄우기  (0) 2014.09.07
Java에서 SQLite 사용하기  (0) 2014.04.11