20일 차 TCP통신
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.InetAddress;
import java.net.Socket;
import java.util.Scanner;
/*
Socket객체를 서버의 아이피주소를 지정해서 생성
Socket객체로부터 getOutputStream()을 얻어 write해서 보내고
Socket객체로부터 getInputStream()을 얻어 read해서 읽고
통신한다
*/
public class TCP_Client2 implements Runnable {
Socket socket = null;
Scanner scan = new Scanner(System.in);
String msg = null;
BufferedWriter bw = null;
public TCP_Client2() {
try {
socket = new Socket(InetAddress.getByName("70.12.115.113"), 5000);
bw = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
@Override
public void run() {
// TODO Auto-generated method stub
try {
while (true) {
msg = scan.nextLine() + "\n";
bw.write(msg);
bw.flush();
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
try {
if (socket != null)
socket.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Date;
/*
ServerSocket 객체를 포트지정해서 생성
ServerSocket 객체를 accept()메소드를 호출(클라이언트의 요청대기)
클라이언트의 요청이 들어와서 연결이 되면
accept()메소드의 반환값으로 Socket객체가 리턴된다.
Socket객체로부터 getOutputStream()을 얻어 write해서 보내고
Socket객체로부터 getInputStream()을 얻어 read해서 읽고
통신한다
*/
public class TCP_Server2 implements Runnable {
ServerSocket serverSocket = null;
Socket socket = null;
public TCP_Server2(ServerSocket socket) {
serverSocket = socket;
}
@Override
public void run() {
// TODO Auto-generated method stub
try {
System.out.println("서버 연결중입니다");
socket = serverSocket.accept(); // 여기까지하면 5000번 포트를 접속 (소켓이 연결되면 클라이언트와 서버의 차이가 없어짐)
System.out.println("연결되었습니다");
BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
while (true) {
Date date = new Date();
String str = date + " -- : " + br.readLine() + "\n";
System.out.println(str);
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
try {
if (socket != null)
socket.close();
if (serverSocket != null)
serverSocket.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
import java.io.IOException;
import java.net.ServerSocket;
public class Test {
public static void main(String[] args) {
try {
ServerSocket socket = new ServerSocket(5000);
Thread t1 = new Thread(new TCP_Client2());
Thread t2 = new Thread(new TCP_Server2(socket));
t1.start();
t2.start();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}