자바로 PC방 프로그램만들기

잠시수련. 자바채팅수련

잠시 잠수가 길었습니다. 자바의 세계가 넓고 무궁무진하다보니, 정말 시간가는 줄 모르고 재밌게 공부하고 있습니다. 하하^^; 
그동안 댓글을 주신 몇분께 감사드리며 이제는 강의제작스타일을 조금 바꿔서 저도 귀찮음 없으면서도 양질의 좋은 강의들을 만들어낼 수 있도록 해보겠습니다;; 

 

본 장은 PC방의 네트워크 기능을 설명하기전.

가장 중요한 채팅방 구현을 통해서 네트워크에 대해 익숙해지며

채팅방을 발전시켜서 PC방 네트워크 프로그램을 만들기위함입니다. 

본 수련페이지에서는 다음과 같은 내용을 다룰 것입니다.

자바 쓰레드, 네트워크 Socket개념, 인풋아웃풋스트림과 메시지 전송등등.

1. 서버와 클라이언트의 접속

1단계 . 서버 생성. 클라이언트 생성.

주요 서버 메서드 

serverSocket = new ServerSocket(7777);
    		System.out.println("서버 대기중...");
			socket = serverSocket.accept();

주요 클라이언트 메서드

socket = new Socket("127.0.0.1", 7777);
    		System.out.println("클라이언트 : 서버 연결됨.");

첫번째 영상

 

2. 메시지 전송과 GUI 연동

Gui에서는 set으로 서로의 주소를 setting 하며 필요한 메소드를 그때그때 요청하여서 객체지향개념을 제대로 살려보는 것이 목표입니다. 

주요 메서드

out = new DataOutputStream(socket.getOutputStream());
    		in = new DataInputStream(socket.getInputStream());

 

총 4개의 파일입니다. 여기서 제공합니다.

http://adunhansa.tistory.com/186

그냥 적지요;

서버 GUi

package chat.server;

import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JFrame;
import javax.swing.JTextArea;
import javax.swing.JTextField;

//빨리 진행
public class ServerGui extends JFrame implements ActionListener {

    private JTextArea jta = new JTextArea(40, 25);
	private JTextField jtf = new JTextField(25);
	// 연동
	private ServerBackground server = new ServerBackground();

	public ServerGui() {

		add(jta, BorderLayout.CENTER);
		add(jtf, BorderLayout.SOUTH);
		jtf.addActionListener(this);

		setDefaultCloseOperation(EXIT_ON_CLOSE);
		setVisible(true);
		setBounds(200, 100, 400, 600);
		setTitle("서버부분");

		server.setGui(this);
		server.setting();
	}

	public static void main(String[] args) {
		new ServerGui();
	}

	@Override
	public void actionPerformed(ActionEvent e) {
		String msg = jtf.getText() + "\n";
		jta.append(msg);
		System.out.print(msg);
		jtf.setText("");
	}

	public void appendMsg(String msg) {
		jta.append(msg);
		System.out.print("날라온 메시지 :"+msg);
	}

}

서버 백그라운드

package chat.server;

import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;

public class ServerBackground {

    // 이슈1. 뭔가 메시지를 주고받고 싶어요. 
	// 이슈2. 하기전에 먼저 GUI 를 만들도록 하겠습니다. 
	// 이슈3. 연동
	
	private ServerSocket serverSocket;
	private Socket socket;
	private DataInputStream in;
	private DataOutputStream out;
	private ServerGui gui;
	
	
	
	public final void setGui(ServerGui gui) {
		this.gui = gui;
	}

	public void setting(){
		try {
			serverSocket = new ServerSocket(7777);
			System.out.println("서버 대기중...");
			socket = serverSocket.accept();
			System.out.println(socket.getInetAddress()+"에서 접속했습니다.");
		
			out = new DataOutputStream(socket.getOutputStream());
			in = new DataInputStream(socket.getInputStream());
			
			String msg = in.readUTF();
			System.out.println("클라이언트로부터의 메시지 : "+msg);
			gui.appendMsg(msg);
			
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
	
	public static void main(String[] args) {
		ServerBackground serverBackground= new ServerBackground();
		serverBackground.setting();
			
	}
	
}

 

클라이언트 GUi

package chat.client;

import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JFrame;
import javax.swing.JTextArea;
import javax.swing.JTextField;

public class ClientGui  extends JFrame implements ActionListener{

    private JTextArea jta = new JTextArea(40, 25);
	private JTextField jtf = new JTextField(25);
	private ClientBackground client = new ClientBackground();
	
	
	public ClientGui() {
		
		add(jta, BorderLayout.CENTER);
		add(jtf, BorderLayout.SOUTH);
		jtf.addActionListener(this);
		
		setDefaultCloseOperation(EXIT_ON_CLOSE);
		setVisible(true);
		setBounds(800, 100, 400, 600);
		setTitle("클라이언트");
		
		client.setGui(this);
		client.connet();
	}
	
	public static void main(String[] args) {
		new ClientGui();
	}

	@Override
	public void actionPerformed(ActionEvent e) {
		String msg = jtf.getText()+"\n";
		jta.append(msg);
		System.out.print(msg);
		
		jtf.setText("");
	}
}

클라이언트 백그라운드

package chat.client;

import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.Socket;

public class ClientBackground {

    private Socket socket;
	private DataInputStream in;
	private DataOutputStream out;
	private ClientGui gui;
	

	public final void setGui(ClientGui gui) {
		this.gui = gui;
	}

	public void connet() {
		try {
			socket = new Socket("127.0.0.1", 7777);
			System.out.println("서버 연결됨.");
			
			out = new DataOutputStream(socket.getOutputStream());
			in = new DataInputStream(socket.getInputStream());
			
			out.writeUTF("안녕하세요. 나는 클라이언트입니다.");
			System.out.println("클라이언트 : 메시지 전송완료");
			
			

		} catch (IOException e) {
			e.printStackTrace();
		}
	}

	public static void main(String[] args) {
		ClientBackground clientBackground = new ClientBackground();
		clientBackground.connet();
	}

}

 

이틀내로 채팅방 최종본 올립니다. 매주 1강씩은 올리도록 노력해보겠습니다. 감사합니다;;

 

댓글

댓글 본문
작성자
비밀번호
  1. glemfk33
    감사합니다 너무 좋은 강의입니다!!!
  2. humit
    강의 감사합니다 ㅎㅎ
  3. 아라한사
    감솨합니다. ㅎㅎㅎ
    대화보기
    • 박지원
      오오오///강의 너무좋은거같아요
      빨리 자바공부 해놓고 와서들어야지 ㅎㅎㅎㅎㅎ
    • 아라한사
      감사합니다;; 하하;;
      대화보기
      • 찌준이
        강의 잘 보고 있어요!
        배우고 싶은 것들이 너무 많은데!

        빨리 올려주세욧!!! 학구열 솟구쳐 오름!!
      • 아라한사
        앗.. 오늘부터 강의 만들게요! 정말 분발 ㅠ.
        대화보기
        • humit
          강의 잘보고 있습니다.! 다음 강의도 좋은 내용이었으면 좋겠습니다 ㅎㅎ
        버전 관리
        아라한사
        현재 버전
        선택 버전
        graphittie 자세히 보기