Client
package chat;
import java.io.IOException;
import java.net.Socket;
import java.util.Scanner;
public class Client {
public static void main(String[] args) {
Socket so = null;
String host;
int port = 7777;
Scanner sc = new Scanner(System.in);
System.out.print("접속할 서버의 주소 입력 : ");
host = sc.nextLine();
try {
so = new Socket(host, port);
Thread sender = new Thread(new ChatSender(so, sc));
Thread reciver = new Thread(new ChatReciver(so));
sender.start();
reciver.run();
} catch (IOException e) {
e.printStackTrace();
} finally {
sc.close();
}
}
}
Server
package chat;
import java.io.IOException;
import java.net.InetAddress;
import java.net.NetworkInterface;
import java.net.ServerSocket;
import java.net.Socket;
import java.net.SocketException;
import java.util.Enumeration;
import java.util.Scanner;
public class Server {
// 서버 컴퓨터의 IP 중에서 가상 IP이거나 루프백 IP를 제외한 실제 IP를 찾아주는 메서드
private static String getLocalServerIp() {
try {
for (Enumeration<NetworkInterface> en = NetworkInterface.getNetworkInterfaces(); en.hasMoreElements();) {
NetworkInterface intf = en.nextElement();
for (Enumeration<InetAddress> enumIpAddr = intf.getInetAddresses(); enumIpAddr.hasMoreElements();) {
InetAddress ia = enumIpAddr.nextElement();
if (!ia.isLoopbackAddress() && !ia.isLinkLocalAddress() && ia.isSiteLocalAddress()) {
return ia.getHostAddress();
}
}
}
}
catch (SocketException ex) {}
return null;
}
public static void main(String[] args) {
ServerSocket ss;
Socket so;
Scanner sc = new Scanner(System.in);
System.out.println("현재 컴퓨터의 IP는 [" + getLocalServerIp() + "] 입니다");
System.out.println("서버 생성. 접속 대기중...");
try {
ss = new ServerSocket(7777);
so = ss.accept();
Thread sender = new Thread(new ChatSender(so, sc));
Thread reciver = new Thread(new ChatReciver(so));
sender.start();
reciver.run();
} catch (IOException e) {
e.printStackTrace();
} finally {
sc.close();
}
}
}
CharReciver
package chat;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.Socket;
import java.net.SocketException;
import java.util.NoSuchElementException;
public class ChatReciver implements Runnable {
private BufferedReader br;
private Socket so;
public ChatReciver(Socket so) {
try {
this.so = so;
br = new BufferedReader(new InputStreamReader(so.getInputStream()));
} catch (IOException e) {
e.printStackTrace();
}
}
@Override
public void run() {
String msg;
try {
while(true) {
msg = br.readLine();
if(msg == null || msg.equals("exit")) {
break;
}
System.out.println(msg);
}
} catch(NoSuchElementException | SocketException e) {
System.out.println("종료됨");
} catch (IOException e) {
e.printStackTrace();
} finally {
try { br.close(); } catch(Exception e) {}
try { so.close(); } catch(Exception e) {}
}
}
}
ChatSender
package chat;
import java.io.IOException;
import java.io.PrintWriter;
import java.net.Socket;
import java.util.Scanner;
public class ChatSender implements Runnable {
private Scanner sc;
private Socket so;
private PrintWriter pw;
public ChatSender(Socket so, Scanner sc) {
try {
this.so = so;
this.sc = sc;
pw = new PrintWriter(so.getOutputStream());
} catch (IOException e) {
e.printStackTrace();
}
}
@Override
public void run() {
String name;
String msg;
System.out.print("채팅에 사용할 닉네임 입력 : ");
name = sc.nextLine();
while(true) {
System.out.print("보낼 메시지 입력 : ");
msg = sc.nextLine();
pw.printf("\n%s] %s\n", name, msg);
pw.flush();
if(msg.equals("exit")) {
break;
}
}
pw.close();
try { so.close(); } catch(Exception e) {}
}
}
'AWS CLOUD FRAMEWORK > Java' 카테고리의 다른 글
[Day20] Ex01 (0) | 2023.04.10 |
---|---|
[Day19] multiChat (0) | 2023.04.08 |
[Day18] Ex03 (0) | 2023.04.07 |
[Day18] Ex02 (0) | 2023.04.07 |
[Day18] Ex01 (0) | 2023.04.07 |