612
No
class TcpServer
package ch15_network;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Scanner;
//서버측 프로그램
public class TcpServer {
//멤버변수
private BufferedReader reader;
private BufferedWriter writer;
private InputStream is;
private OutputStream os;
private ServerSocket ss;
//생성자
public TcpServer(int port){
try {
//지정된 포트를 사용하는 서버소켓 오픈
ss = new ServerSocket(port);
} catch (IOException e) {
e.printStackTrace();
}
while(true){
System.out.println("서비스가 시작되었습니다.");
try {
//클라이언트의 접속을 기다리다가 접속을 요청하면 승인
// ServerSocket 서버에서 서비스를 하기 위한 소켓
// Socket 클라이언트용 소켓
// 서버소켓.accept() 클라이언트가 접속할 때까지 대기, 접속하면 접속허용
Socket tcpSocket = ss.accept();
System.out.println("접속한 클라이언트의 ip주소:"+
tcpSocket.getInetAddress().getHostAddress() +" 포트번호 :"+ tcpSocket.getPort());
//클라이언트에서 보내는 메시지를 수신할 입력스트림
is = tcpSocket.getInputStream();
reader = new BufferedReader(new InputStreamReader(is));
//클라이언트로 보낼 메시지를 처리하는 출력스트림
os = tcpSocket.getOutputStream();
writer = new BufferedWriter(new OutputStreamWriter(os));
String message = reader.readLine(); //메시지 읽기
System.out.println("수신한 메시지:"+ message);
//줄바꿈 문자 추가
message += System.getProperty("line.separator");
System.out.println("클라이언트에게 보낼 메시지를 입력하세요.");
Scanner scan=new Scanner(System.in);
String send = scan.next();
scan.close();
writer.write(send); //메시지 쓰기
writer.flush(); //버퍼를 비움(clear)
// reader,writer close 처리
reader.close();
writer.close();
tcpSocket.close(); //소켓 종료
} catch (Exception e) {
e.printStackTrace();
}
}
}
public static void main(String[] args) {
new TcpServer(3000); //3000번 포트 사용
}
}
class TcpClient
package ch15_network;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.net.Socket;
import java.util.Scanner;
//클라이언트용 프로그램
public class TcpClient {
//멤버변수
private String ip;
private int port;
private String str;
private BufferedReader reader;
private BufferedWriter writer;
public TcpClient(String ip, int port){
this.ip = ip;
this.port = port;
Socket socket = getSocket();
try {
//서버에 보낼 메시지 입력
OutputStream os = socket.getOutputStream();
writer = new BufferedWriter(new OutputStreamWriter(os));
System.out.print("메시지를 입력하세요:");
Scanner scan = new Scanner(System.in);
String message = scan.next();
scan.close();
//네트워크상에서 문자열을 보낼 때 줄바꿈이 누락되는 경우가 있음.
message += System.getProperty("line.separator"); //줄바꿈 문자추가
writer.write(message); //서버에 메시지 전송
writer.flush(); //출력버퍼를 비움(clear)
//서버의 메시지를 수신
// 서버와 연결된 소켓을 통해 입력스트림 객체 생성
InputStream is = socket.getInputStream();
// 입력스트림에 대한 한글처리, 버퍼로 처리가능하도록 객체 생성
reader = new BufferedReader(new InputStreamReader(is));
// 서버의 메시지를 라인 단위로 읽어옴
String receive = reader.readLine();
System.out.println("서버에서 받은 메시지:"+ receive);
writer.close(); //스트림 닫기
reader.close();
socket.close(); //소켓 종료
} catch (Exception e) {
e.printStackTrace();
}
}
Socket getSocket(){
Socket s = null;
try {
s = new Socket(ip,port); //서버에 접속시도==>성공==>소켓생성
} catch (Exception e) {
e.printStackTrace();
}
return s; //소켓을 리턴
}
public static void main(String[] args) {
new TcpClient("192.168.0.2", 3000);
}
}
댓글 ( 4)
댓글 남기기