네트워크?
여러대의 컴퓨터를 통신 회선으로 연결한 것
소켓 프로그래밍
->소켓을 이요한 통신프로그래밍
소켓 : 프로세스 간의 통신에 사용되는 양쪽 끝 단
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 (2) | 2024.02.26 |