JAVA

[JAVA]네트워크

로돌씨 2024. 3. 8. 20:43
네트워크?
여러대의 컴퓨터를 통신 회선으로 연결한 것

 

 

소켓 프로그래밍

->소켓을 이요한 통신프로그래밍

소켓 : 프로세스 간의 통신에 사용되는 양쪽 끝 단

 

TCP : 데이터 전송속도가 느리지만 정확하고 안정적으로 전달할수있는 연결지향적 프로토콜

 

서버용 소켓 프로그래밍

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;

public class TCPServer {

	public static void main(String[] args) throws IOException {
		// 서버소켓생성
		ServerSocket serverSocket = null;
		// 요청한 클라이언트와 연결 소켓
		Socket serviceSocket = null;

		PrintWriter out = null; // 출력객체

		BufferedReader in = null; // 입력객체

		serverSocket = new ServerSocket(8888);
		// 예외처리 쓰로우

		System.out.println("client를 기다립니다.");

		while (true) {
			serviceSocket = serverSocket.accept();

			in = new BufferedReader(new InputStreamReader(serviceSocket.getInputStream()));
			// 통로가 맞지않음 보조스트림 이용 ( InputStreamReader)
			// 클라이언트에게 받은 내용을 라인단위로 읽어서

			// 클라이언트에게 보내주겠다
			out = new PrintWriter(serviceSocket.getOutputStream(), true);

			// 통로 생성 완료

			String inputLine;
			while ((inputLine = in.readLine()) != null) {
				System.out.println("클라이언트가 보낸 메시지 : " + inputLine);
				out.println(inputLine);

			}
			out.close();
			in.close();
			serviceSocket.close();
			serverSocket.close();
		}
	}

}

 

클라이언트 소켓 프로그래밍

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.UnknownHostException;

public class TCPClient {

	public static void main(String[] args) throws UnknownHostException, IOException {
		Socket clientSocket;
		PrintWriter out = null;
		BufferedReader in = null;
		BufferedReader stdIn = null;

		System.out.println("server에 접속합니다...");
		clientSocket = new Socket("localhost", 8888);
		
		out = new PrintWriter(clientSocket.getOutputStream(),true);
		in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
		stdIn = new BufferedReader(new InputStreamReader(System.in));
		
		String inputLine;
		while((inputLine = stdIn.readLine())!= null) { //키보드로 입력받은값을 
			out.println(inputLine + " client"); //클라이언트로 보냄
			System.out.println("server로부터 다시받은 메세지 : " + in.readLine());
			
			
			
		}
		stdIn.close();
		in.close();
		out.close();
		clientSocket.close();
		
	}

}

 

 

UDP :전송속도가 빠르지만 신뢰성없는 데이터를 전송하는 비연결 지향적 프로토콜

UDP는 연결지향적이지 않기때문에 연결요청을 받아줄 서버소켓이 필요없음

두개의 DatagramSocket간에 DatagramPacket으로 변환된 데이터 주고받음

 

UDP 서버 소켓 프로그래밍

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;
import java.net.UnknownHostException;

public class UDPServer {
	public static void main(String [] args) throws IOException{
		//소켓 생성
		DatagramSocket ds = new DatagramSocket();
		System.out.println("서버입니다.");
		
		//보낼 데이터 
		byte [] buff = "연습입니다." .getBytes();
		
		//DatagramPacket 
		
		DatagramPacket sendP= new DatagramPacket(buff ,buff.length , 
				InetAddress.getByName("localhost"),9999);
		//무엇을 , 얼마만큼 , 어디로 보낼것이냐 정한 후에 예외처리
		
		//전송
		ds.send(sendP); 
		
		//종료
		ds.close();
		ds.disconnect(); //닫고 연결끊기
		
	}
}

 

UDP 클라이언트 소켓 프로그래밍

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;
import java.net.UnknownHostException;

public class UDPClient {

	public static void main(String[] args) throws IOException {
		DatagramSocket ds = new DatagramSocket(9999);
		System.out.println("클라이언트");

		// 전송받을 방 생성
		byte[] buff = new byte[1024];

		// 패킷 받음
		DatagramPacket recieveP = new DatagramPacket(buff, buff.length);
//	ds.recieve(recieveP);
		ds.receive(recieveP);
		System.out.println(new String(recieveP.getData())); // 스트링타입으로 변환

		// 종료
		ds.close();
		ds.disconnect();
	}

}

'JAVA' 카테고리의 다른 글

[JAVA] JDBC #1  (0) 2024.04.16
[JAVA]MVC패턴  (0) 2024.03.21
[JAVA]Thread  (0) 2024.03.05
[JAVA] Collection(List , set , Map)  (1) 2024.02.27
[JAVA]입출력( I / O ) #2  (1) 2024.02.26