자바

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


 

 

 

 

 

 

 

 

 

 

about author

PHRASE

Level 60  머나먼나라

뒤웅박 차고 바람 잡는다 , 불가능하고 허황된 짓을 함을 이르는 말.

댓글 ( 4)

댓글 남기기

작성