삼성SDS_멀티캠퍼스/Java

20일 차 TCP통신

박성우기 2015. 10. 6. 17:09
반응형

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();

}


}

}






반응형