공부
네트워크 스트림
빈v
2022. 7. 26. 17:21
728x90
소켓: TCP/IP 네트워크(OSI 7계층 중 1~4 계층)를 자동으로 이용하기 쉽게 처리해주는 기술
TCP(서버, 클라이언트), UDP(서버, 클라이언트)
ServerSocket serverSocket = new ServerSocket(9999); //9999번 포트 사용
포트를 열어 9999번 포트 LISTENING 상태로 바뀜
Socket clientSocket=new Socket("IP주소",9999);
서버와 연결되도록 주소와 포트번호 지정
서버
import java.io.DataInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;
public class Server01 {
public static void main(String[] args) throws IOException {
ServerSocket serverSocket = new ServerSocket(9999); //9999번 포트 사용
Socket clientSocket = serverSocket.accept();
InputStream is =clientSocket.getInputStream(); //상대방으로부터 읽을 수 있는 스트림
DataInputStream dis = new DataInputStream(is);
int data=dis.readInt();
System.out.println(data);
clientSocket.close();
//clientSocket.getOutputStream(); //상대방으로부터 보낼 수 있는 스트림
}
}
클라이언트
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.net.Socket;
public class Client01 {
public static void main(String[] args) throws IOException{
Socket clientSocket=new Socket("ip주소",9999);
OutputStream os = clientSocket.getOutputStream();
DataOutputStream dos=new DataOutputStream(os);
dos.writeInt(100);
clientSocket.close();
}
}
서버에서 대기 -> 클라이언트에서 생성 3hand shaking
-> 데이터 전송 -> 종료
System.out.println("client IP addr: "+clientSocket.getInetAddress());
System.out.println("server IP addr: "+clientSocket.getLocalAddress());
System.out.println("client Port: "+clientSocket.getPort());
System.out.println("server Port: "+clientSocket.getLocalPort());
IP주소, Port 번호 출력
블랙리스트일 경우 출력x
import java.io.BufferedReader;
import java.io.DataInputStream;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;
public class Server02 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new FileReader("블랙리스트파일 주소"));
ServerSocket serverSocket = new ServerSocket(9999); //9999번 포트 사용
Socket clientSocket = serverSocket.accept();
while(true){
String line=br.readLine();
if(line==null){
break;
}
if(line.equals(clientSocket.getInetAddress().toString())){
System.out.println("403 forbidden");
clientSocket.close();
return;
}
}
InputStream is =clientSocket.getInputStream(); //상대방으로부터 읽을 수 있는 스트림
DataInputStream dis = new DataInputStream(is);
int data=dis.readInt();
System.out.println(data);
clientSocket.close();
//clientSocket.getOutputStream(); //상대방으로부터 보낼 수 있는 스트림
}
}
메모장에서 블랙리스트를 불러들어와 블랙리스트일 경우 연결 종료
Http 통신 요청해서 응답받기
import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.Socket;
public class Client02 {
public static void main(String[] args) throws IOException{
Socket clientSocket=new Socket("www.ddarahakit.kro.kr",80);
OutputStream os = clientSocket.getOutputStream();
DataOutputStream dos=new DataOutputStream(os);
dos.writeBytes("GET / HTTP/1.1\r\nHost: www.ddarahakit.kro.kr\r\n\r\n");
InputStream is=clientSocket.getInputStream();
InputStreamReader isr=new InputStreamReader(is);
BufferedReader br=new BufferedReader(isr);
PrintWriter pw = new PrintWriter("저장할 파일 주소");
while(true){
String data=br.readLine();
if(data==null){
break;
}
System.out.println(data);
pw.println(data);
}
br.close();
pw.close();
clientSocket.close();
}
}
728x90
반응형