IT story/Java

ex) 네트워크통신(채팅창 생성)

jason719 2016. 9. 14. 15:20

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