(JAVA) TCP/IP통신 1:1 채팅프로그램
package p10.chatting;
import java.net.Socket;
/**
* MultiThread방식의 Client
* - SenderThread와 RecieveThread 중 하나라도
* 실행 중이면 main메소드는 종료되지 않음.
* - 서버와 클라이언트간이 통신은 소켓간의 통신.
* */
public class ClientExample {
public static void main(String[] args) {
Socket socket = null;
try {
socket = new Socket("192.168.10.58", 5011);//소켓생성(ip주소,port)
Thread th1 = new SenderThread(socket);
Thread th2 = new ReceiverThread(socket);
th1.start();
th2.start();
}catch(Exception e) {
System.out.println(e.getMessage());
}
}
}
package p10.chatting;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.Socket;
public class ReceiverThread extends Thread{
//필드
Socket socket;
//생성자
public ReceiverThread(Socket socket) {
this.socket = socket;
}
//메소드
@Override
public void run() {
try {
BufferedReader reader
= new BufferedReader(new InputStreamReader(socket.getInputStream()));
while(true) {
String str = reader.readLine();//데이타의 한줄 구분 '\r\n'
if(str==null) break;//입력받은 값이 없으면 반복문 종료
System.out.println("수신>"+str);//수신메세지 출력
}
}catch(Exception e) {
System.out.println(e.getMessage());
}
}
}
package p10.chatting;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
/**
* 송신 thread객체
* */
public class SenderThread extends Thread{
//필드
Socket socket;
//생성자
public SenderThread(Socket socket) {
this.socket = socket;
}
//메소드
@Override
public void run() {
try {
//입력으로들어어는 스트림의 속도 향상
BufferedReader reader
= new BufferedReader(new InputStreamReader(System.in));
PrintWriter writer =
new PrintWriter(socket.getOutputStream());//출력스트림
while(true) {
String str = reader.readLine();//입력된 데이타를 한줄단위로 읽음
if(str.equals("bye"))
break;//입력값이 bye면 클라이언트 종료
writer.println(str);//bye가 아니면 메세지 전송
writer.flush();//버퍼내의 데이타 밀어내기
}
}catch(Exception e) {
System.out.println(e.getMessage());
}finally {
try {
socket.close();//클라이언트 종료시는 반드시 소켓 해제
}catch(Exception e) {}
}
}
}
package p10.chatting;
import java.net.ServerSocket;
import java.net.Socket;
/**
* 서버는 ServerSocket을 가짐
* ServerSocket이 Socket을 생성
* */
public class ServerExample {
public static void main(String[] args) {
//소켓 생성
ServerSocket serverSocket = null;
Socket socket = null;
try {
serverSocket = new ServerSocket(5011);//port번호5001로 서버소켓 생성
socket = serverSocket.accept();//소켓생성 메소드 accept();
Thread th1 = new SenderThread(socket);
Thread th2 = new ReceiverThread(socket);
th1.start();
th2.start();
}catch(Exception e) {System.out.println(e.getMessage());
}finally {//서버 종료시 소켓을 해제
try {
serverSocket.close();
}catch(Exception e) {}
}
}
}
댓글