잠시 잠수가 길었습니다. 자바의 세계가 넓고 무궁무진하다보니, 정말 시간가는 줄 모르고 재밌게 공부하고 있습니다. 하하^^;
그동안 댓글을 주신 몇분께 감사드리며 이제는 강의제작스타일을 조금 바꿔서 저도 귀찮음 없으면서도 양질의 좋은 강의들을 만들어낼 수 있도록 해보겠습니다;;
본 장은 PC방의 네트워크 기능을 설명하기전.
가장 중요한 채팅방 구현을 통해서 네트워크에 대해 익숙해지며
채팅방을 발전시켜서 PC방 네트워크 프로그램을 만들기위함입니다.
본 수련페이지에서는 다음과 같은 내용을 다룰 것입니다.
자바 쓰레드, 네트워크 Socket개념, 인풋아웃풋스트림과 메시지 전송등등.
04 자바 네트워크_ 채팅 from 라한사 아
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강씩은 올리도록 노력해보겠습니다. 감사합니다;;

