awt와 네트워크통신을 이용해 채팅창 생성하기
지난주 수업에서 배운 awt로 채팅창을 생성하고 네트워크통신과 연결하는 것이다.
이미 다 배운 내용이라 쉽다고 하지만 초심자인 나로서는 두 개의 클래스를 하나로 만드는 것이
쉽지는 않았다... 같은 반 형이 만든 것을 보고 만들었다!
어떻게 구현 했는지 아래의 예제를 통해 살펴보자.
예제
package com.javalesson.ch21network;
import java.awt.Frame;
import java.awt.TextArea;
import java.awt.TextField;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.Socket;
import java.net.UnknownHostException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class L03Messenger extends Frame {
TextArea ta;
TextField tf;
SimpleDateFormat sdf;
Socket socket;
DataOutputStream out;
String userName;
public L03Messenger(String title) {
super(title);
ta = new TextArea();
tf = new TextField();
sdf = new SimpleDateFormat("HH:mm:ss");
userName = "jsKim";
tf.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
clientSender(socket, userName);
tf.setText("");
}
});
this.addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
super.add(ta, "Center");
super.add(tf, "South");
ta.setEditable(false);
this.setBounds(300, 200, 500, 300);
this.setVisible(true);
tf.requestFocus();
socketInit();
}//생성자
public void socketInit() {
try{
socket = new Socket("172.30.4.240",5000);
new ClientReceiver2(socket).start();
out = new DataOutputStream(socket.getOutputStream());
if(out!=null) {
out.writeUTF(userName);
}
} catch (UnknownHostException e){e.printStackTrace();
} catch (IOException e){e.printStackTrace();
}
}
public void clientSender(Socket socket, String name) {
try {
if(out!=null){
out.writeUTF(name+":"+tf.getText().trim());
}
} catch (IOException e){e.printStackTrace();
}
}
class ClientReceiver2 extends Thread {
DataInputStream in;
public ClientReceiver2(Socket socket) {
try {
in = new DataInputStream(socket.getInputStream());
} catch (IOException e){e.printStackTrace();
}
}
@Override
public void run() {
while(in!=null){
try {
ta.append(sdf.format(new Date())+" "+in.readUTF()+"\n");
} catch (IOException e){e.printStackTrace();
}
}
}
}
public static void main(String[] args) {
new L03Messenger("Messenger");
}//main
}//class
※ Console 출력내용
참고로, 서버에 접속하기 전에 지난 시간에 배운 서버 생성을 먼저 실행해야 한다.
2016/09/08 - [Java story/Java] - D+23 네트워크통신(Tcp/Ip Server)
'IT story > Java' 카테고리의 다른 글
D+23 네트워크통신(Tcp/Ip Server) (0) | 2016.09.08 |
---|---|
D+22 네트워크통신 (Tcp/Ip Client) (0) | 2016.09.08 |
D+21 Text Editor(메모장 만들기) (0) | 2016.09.06 |
D+20 awt(text & text editor) (0) | 2016.09.06 |
D+19 Thread(쓰레드) (0) | 2016.09.01 |