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