IT

java network programming

kio467 2014. 8. 30. 16:21

package JavaStudy;

/**

 * @file name : TcpIpMultichatServer.java

 * @date : 2013. 9. 29.

 * @discription : 채팅프로그램 - 서버

 * 

 */


import java.io.DataInputStream;

import java.io.DataOutputStream;

import java.io.IOException;

import java.net.ServerSocket;

import java.net.Socket;

import java.util.Collections;

import java.util.HashMap;

import java.util.Iterator;


/**

 * @author Cremazer(cremazer@gmail.com)

 */

public class TcpIpMultichatServer {

HashMap clients;


TcpIpMultichatServer() {

clients = new HashMap();

Collections.synchronizedMap(clients);

}


public void start() {

ServerSocket serverSocket = null;

Socket socket = null;


try {

serverSocket = new ServerSocket(7777);

System.out.println("서버가 시작되었습니다.");


while (true) {

socket = serverSocket.accept();

System.out.println("[" + socket.getInetAddress() + ":"

+ socket.getPort() + "]" + "에서 접속하였습니다.");

ServerReceiver thread = new ServerReceiver(socket);

thread.start();

}


} catch (Exception e) {

e.printStackTrace();

}

} // start()


void sendToAll(String msg) {

Iterator it = clients.keySet().iterator();


while (it.hasNext()) {

try {

DataOutputStream out = (DataOutputStream) clients

.get(it.next());

out.writeUTF(msg);

} catch (IOException e) {

}

} // while


} // sendToAll


public static void main(String args[]) {

new TcpIpMultichatServer().start();

}


class ServerReceiver extends Thread {

Socket socket;

DataInputStream in;

DataOutputStream out;


ServerReceiver(Socket socket) {

this.socket = socket;

try {

in = new DataInputStream(socket.getInputStream());

out = new DataOutputStream(socket.getOutputStream());

} catch (IOException e) {

}

}


public void run() {

String name = "";

try {

name = in.readUTF();

sendToAll("#" + name + "님이 들어오셨습니다.");


clients.put(name, out);

System.out.println("현재 서버접속자 수는 " 

+ clients.size() + "입니다.");

while (in != null) {

sendToAll(in.readUTF());

}


} catch (IOException e) {

// ignore

} finally {

sendToAll("#" + name + "님이 나가셨습니다.");

clients.remove(name);

System.out.println("[" + socket.getInetAddress() + ":"

+ socket.getPort() + "]" 

+ "에서 접속을 종료하였습니다.");

System.out.println("현재 서버접속자 수는 " 

+ clients.size() + "입니다.");

} // try

} // run


} // ReceiverThread

}




























package JavaStudy;

/**

 * @file name : TcpIpMultichatClient.java

 * @date : 2013. 9. 29.

 * @discription : 채팅 프로그램 - 클라이언트

 * 

 */


import java.io.DataInputStream;

import java.io.DataOutputStream;

import java.io.IOException;

import java.net.ConnectException;

import java.net.Socket;

import java.util.Scanner;


/**

 * @author Cremazer(cremazer@gmail.com)

 */

public class TcpIpMultichatClient {

public static void main(String args[]) {

if (args.length != 1) {

System.out.println("USAGE: java TcpIpMultichatClient 대화명");

System.exit(0);

}


try {

String serverIp = "127.0.0.1";

// 소켓을 생성하여 연결을 요청한다.

Socket socket = new Socket(serverIp, 7777);

System.out.println("서버에 연결되었습니다.");


Thread sender = new Thread(new ClientSender(socket, args[0]));

Thread receiver = new Thread(new ClientReceiver(socket));


sender.start();

receiver.start();

} catch (ConnectException ce) {

ce.printStackTrace();

} catch (Exception e) {

}

} // main


static class ClientSender extends Thread {

Socket socket;

DataOutputStream out;

String name;


ClientSender(Socket socket, String name) {

this.socket = socket;

try {

out = new DataOutputStream(socket.getOutputStream());

this.name = name;

} catch (Exception e) {

}

}


public void run() {

Scanner scanner = new Scanner(System.in);

try {

if (out != null) {

out.writeUTF(name);

}


while (out != null) {

out.writeUTF("[" + name + "]" + scanner.nextLine());

}

} catch (IOException e) {

}

} // run()

}


static class ClientReceiver extends Thread {

Socket socket;

DataInputStream in;


ClientReceiver(Socket socket) {

this.socket = socket;

try {

in = new DataInputStream(socket.getInputStream());

} catch (IOException e) {

}

}


public void run() {

while (in != null) {

try {

System.out.println(in.readUTF());

} catch (IOException e) {

}

}

} // run


}

}