[back-end]/자바-소켓

소켓 프로그램

broship 2020. 12. 24. 20:58

- 웹 소켓:

A 와 B가 연결을 할려 그럼

A ip, A port, B ip, B port 가 필요

A는 connect 상태

B는 listen 상태였다가 전송이 오면 accept 상태가 됨(통신이 연결됨)

send / receive

A close, B close

 

- 일방형 통신 프로그램(무전기)

서버

package tcp;

import java.io.DataOutputStream;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;

public class TCPServer {
	//전화 받는쪽
	public static void main(String[] args) throws IOException {
		//1024이하의 포트 번호는 고정 포트기 때문에 사용X, 그외 아무 포트 사용 가능
		ServerSocket ss = new ServerSocket(7777); //listen, 해당 포트로 오는 모든 연결을 열어놈
		System.out.println("전화 준비 완료");
		
		while(true) {
			System.out.println("전화 기다리는중...");
			Socket s = ss.accept(); //accept, s에는 전화온 사람의 소켓이 들어있음
			System.out.println(s.getInetAddress()+ "로 부터 전화가 옴");
			
			//byte단위로 보내는 파일 전송
			DataOutputStream dos = new DataOutputStream(s.getOutputStream());
			dos.writeUTF("여보세요~");
			//getOutputStream 상대방쪽으로 보냄
			
			dos.close();
			s.close();
		}

	}

}

클라이언트

package tcp;

import java.io.DataInputStream;
import java.io.IOException;
import java.net.Socket;
import java.net.UnknownHostException;

public class TCPClient {

	public static void main(String[] args) throws UnknownHostException, IOException {
		Socket s = new Socket("127.0.0.1", 7777); //127.0.0.1 이 ip 주소로 7777 포트로 접속
		
		DataInputStream dis = new DataInputStream(s.getInputStream());
		//getInputStream: 상대방으로부터 받음
		System.out.println("상대방이 한말: " + dis.readUTF());
		
		dis.close();
		s.close();
		System.out.println("전화 끊어짐");

	}

}

 

서버 실행 후 클라이언트 실행할 때마다 통신이됨

 

파워쉘 하나 띄워서 java 패키지명.파일명 으로 서버 열고

또 하나 띄어서 java 패키지명.파일명 으로 클라이언트 실행시 통신됨