본문 바로가기
자바 프로그래밍/코드

Network 개념실습

by 구리Guri 2020. 3. 9.

Server.java

import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;

import javax.swing.JOptionPane;

//네트워크 프로그래밍시 오류가 나는 경우 --> 프로토콜이 안맞는 경우가 높음( 나는 writeUTF 했는데 상대는 writeInt 등을 햇을 경우)


public class Server {
	public static void main(String[] args) throws Exception {
		//trycatch로 하면 어려워서 일단 던짐, 나중에 trycatch로 변경 필요
		
		//서버소켓 생성
		ServerSocket server = new ServerSocket(10000);//포트번호 10000번
		
		//서버는 자신에게 접속하는 클라이언트가 있는지 감시해야함.
		System.out.println("서버가 구동되었습니다.");
		System.out.println("클라이언트 연결을 대기중 입니다...");
		Socket sock = server.accept();//접속하는 클라이언트가 있는지 무한히 감시하고 있는 상태(반복). 누가 접속하면 break를 타고 나가면서 return으로 소켓을 생성함.
		
		System.out.println(sock.getInetAddress() + " 에서 연결하였습니다."); //소켓과 연결된 상대방의 IP주소 확인가능
		
		OutputStream os = sock.getOutputStream(); //Output Stream 개방
		//밧줄 하나 연결되어있는 느낌. 통신을 할 수 있지만 다소 불편함.
		//쓰기편하게 한번 업그레이드 해줘야함.
		DataOutputStream dos = new DataOutputStream(os); //기존의 OutputStream을 업그레이드시켜주는 느낌이기 때문에 생성자에 기존의 Outputstream을 넣어주어야함.
		
		InputStream is = sock.getInputStream();
		DataInputStream dis = new DataInputStream(is);
		
		while(true) { //한번만 보내는게 아니라, 계속 보내고 싶으니까
		dos.writeUTF(JOptionPane.showInputDialog("보낼 메세지를 입력하세요.")); //상대방에 안감. 택배차에 실리고만 있음.
		//택배차가 꽉 차면 출발하는데, 여기까지 실은 꺼만 보내라 하고 싶을때는..
		dos.flush(); //쏟아내라~ 보내라~~~ 택배차에게 보내라~~~ 상대방에게 데이터가 쏟아진다
		//flush = 출발~!!!
		
		String msg = dis.readUTF();
		System.out.println(msg);
		}
		
	}
}

 

Client.java

import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;

import javax.swing.JOptionPane;

public class Client {
	public static void main(String[] args) throws Exception {
		//소켓 생성
		Socket sock = new Socket("192.168.60.42",10000);
		
		//입력스트림 개방, DataInputStream으로 업그레이드
		InputStream is = sock.getInputStream();
		DataInputStream dis=new DataInputStream(is);
		
		OutputStream os = sock.getOutputStream();
		DataOutputStream dos = new DataOutputStream(os);
		
		while(true) {
		//DataInputStream에서 받은 것을 String형 변수 msg에 저장
		String msg = dis.readUTF();//readUTF에 인자값 넣지 마세요! 입력스트림으로 날아온 값을 읽는 역할일뿐
		//출력
		System.out.println(msg);
		
		dos.writeUTF(JOptionPane.showInputDialog("보낼 메세지를 입력하세요."));
		dos.flush();
		}
	}
}

'자바 프로그래밍 > 코드' 카테고리의 다른 글

Network 개념실습  (0) 2020.03.09
List, Set, Map  (0) 2020.03.09
생성자  (0) 2020.03.09
메서드, 멤버필드, static  (0) 2020.03.09
객체지향 - 인스턴스, 정보은닉  (0) 2020.02.16
메서드 오버로딩  (0) 2020.02.16

댓글0