2023-02-28 화 / JAVA

권혁현·2023년 2월 28일
0

Java

목록 보기
44/44
post-thumbnail

1.서버 클라이언트 일대일 채팅 프로그램을 짜시오.

package java_chat;

import java.net.ServerSocket;
import java.net.Socket;

public class TcpServer {

	public static void main(String[] args) {
		ServerSocket serverSocket = null;
		Socket socket = null;
		
		try {
			serverSocket = new ServerSocket(7777); //port 번호
			socket = serverSocket.accept();
			
			Sender sender = new Sender(socket);
			Receiver receiver = new Receiver(socket);
			
			sender.start();
			receiver.start();
			
		} catch (Exception e) {
			e.printStackTrace();
		}

	}

}

package java_chat;

import java.net.ServerSocket;
import java.net.Socket;

public class TcpClient {

	public static void main(String[] args) {
		String serverIp = "127.0.0.1"; //자기 컴퓨터 IP 
		
		try {
			Socket socket = new Socket(serverIp, 7777);
			
			System.out.println("서버에 연결되었습니다.");
			
			Sender sender = new Sender(socket);
			Receiver receiver = new Receiver(socket);
			
			sender.start();
			receiver.start();
			
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

package java_chat;

import java.io.DataOutputStream;
import java.net.Socket;
import java.util.Scanner;

public class Sender extends Thread {
	Socket socket;
	DataOutputStream out;
	String name;
	
	public Sender(Socket socket) {
		this.socket = socket;
		
		try {
			out = new DataOutputStream(socket.getOutputStream());
			name = "["+socket.getInetAddress()+":"+socket.getPort()+"]";
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	@Override
	public void run() {
		Scanner scanner = new Scanner(System.in);
		while (out != null) {
			try {
				out.writeUTF(name + scanner.nextLine());
			}catch (Exception e) {
				
			}
		}
	}
}

package java_chat;

import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.net.Socket;
import java.util.Scanner;

public class Receiver extends Thread {
	Socket socket;
	DataInputStream in;
	
	public Receiver(Socket socket) {
		this.socket = socket;
		
		try {
			in = new DataInputStream(socket.getInputStream());
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	@Override
	public void run() {
		while (in != null) {
			try {
				System.out.println(in.readUTF());
			}catch (Exception e) {
				
			}
		}
	}
}

  • TcpServer 실행 후 TcpClient 실행

2. Socket 에 대하여 설명하시오.

  • Server와 Client가 특정 Port를 통해 실시간으로 양방향 통신을 하는 방식

  • 서버와의 연결 / 서버로 데이터 전송 / 서버에서 데이터 리딩

  • 일반적인 통신의 단계는
    Step 1. 클라이언트가 호스트 이름 / IP 주소 및 포트 번호로 지정된 서버에 대한 연결 시작
    Step 2. OutputStream을 사용하여 서버에 데이터 전송
    Step 3. InputStream을 사용하여 서버에서 데이터를 읽음
    Step 4. 연결을 종료
    (Step 2와 Step 3은 통신의 성격에 따라 여러 번 반복 될 수 있다.)

0개의 댓글