//로컬 호스트 이름과 IP 주소를 반환합니다.
InetAddress i = InetAddress.getLocalHost();
i.getHostAddress();//IP
i.getAddress();//???
//컴퓨터 이름을 통해 컴퓨터 관련 정보를 얻습니다.
InetAddress i = InetAddress.getByName("리빙스톤-PC");
//도메인 이름을 통해 호스트 관련 정보를 가져옵니다.
InetAddress ibaidu = InetAddress.getByName("www.baidu.com");
URL url = 새 URL("http://localhost:8080/demo.html");
url.getHost();
소켓(클라이언트):
객체가 확립되면 지정된 호스트에 접속할 수 있다. TCP는 연결 지향적이므로 소켓 서비스 확립 시에는 서버가 존재해야 하며, 접속이 이루어진 후에는 해당 채널에서 데이터 전송이 이루어진다. ;
//클라이언트의 소켓 서비스를 생성하고 대상 호스트와 포트를 지정합니다.
소켓 s = new Socket("cj-PC", 10003);
// 데이터를 전송하려면 소켓 스트림의 출력 스트림을 가져와야 합니다.
OutputStream 출력 = s.getOutputStream();
//PrintWriter out = new PrintWriter(s.getOutputStream(),true);out.println("Hello");
out.write("hello".getBytes());
//응답 메시지를 받습니다.
InputStream in = s.getInputStream();
바이트[] bufIn = 새 바이트[1024];
int num = in.read(bufIn);
System.out.println(new String(bufIn, 0, num));
s.close();//의 스트림 객체는 소켓에 캡슐화되고 자동으로 스트림 객체를 닫습니다.
ServerSocket(서버):
서버측 소켓 서비스인 ServerSocket을 설정하고 포트를 수신합니다.
객체의 accept 메소드를 통해 연결된 클라이언트 객체를 가져옵니다. 연결이 없으면 대기(차단)합니다.
클라이언트가 데이터를 보내는 경우 서버는 해당 클라이언트 개체의 읽기 스트림을 사용하여 클라이언트가 보낸 데이터를 가져와야 합니다.
ServerSocket ss = 새 ServerSocket(10003);
//ServerSocket(int port,int backlog); 백로그는 최대 연결 수입니다.
소켓 s = ss.accept();
InputStream in = s.getInputStream();
바이트[] buf = 새 바이트[2014];
int len = in.read(buf);
String Rec = new String(buf, 0, len);
System.out.println(rec);
// 메시지를 다시 보냅니다.
OutputStream 출력 = s.getOutputStream();
out.write("수신됨".getBytes());
s.close();//서버가 자동으로 클라이언트를 닫습니다.
(1)클라이언트:
소켓 서비스를 설정하고 연결할 호스트와 포트를 지정합니다.
소켓 스트림에서 출력 스트림을 가져오고 스트림에 데이터를 쓴 다음 네트워크를 통해 서버로 보냅니다.
소켓 스트림에서 입력 스트림을 얻고, 서버가 피드백한 데이터를 얻고, 클라이언트 리소스를 닫습니다.
DatagramSocket: UDP 전송을 통해 텍스트 데이터를 보냅니다.
보내다:
//udp 서비스를 생성하고, DatagramSocket 객체를 생성하고 제품 번호를 제공합니다.
DatagramSocket 소켓 = new DatagramSocket(8888);
// 데이터를 결정하고 이를 데이터 패킷인 DatagramPacket으로 캡슐화합니다(대상 시스템의 포트 번호를 지정해야 함).
byte[] buf = "udp 내가 갑니다".getBytes();
DatagramPacket dp = 새로운 DatagramPacket(buf, buf.length,
InetAddress.getByName("컴퓨터 이름"), 10086);
// 보내다;
소켓.send(dp);
// 폐쇄;
소켓.닫기();
받다:
//udpsocket 서비스를 정의합니다. 일반적으로 포트는 모니터링되며 실제로 수신 네트워크 애플리케이션의 디지털 ID를 정의합니다.
DatagramSocket 소켓 = new DatagramSocket(10086);
while (true) { //지속적인 모니터링이 목적
바이트[] buf = 새 바이트[1024];
//데이터를 저장하기 위한 데이터 패키지를 정의합니다.
DatagramPacket dp = new DatagramPacket(buf, buf.length);
// 서비스의 receive 메소드를 통해 수신된 데이터를 데이터 패킷에 저장합니다.
소켓.수신(dp);//차단 방법, 데이터가 없으면 여기에 멈춤;
// 데이터 패킷 메소드를 통해 데이터를 얻습니다.
문자열 ip = dp.getAddress().getHostAddress();
문자열 데이터 = new String(dp.getData(), 0, dp.getLength());
int 포트 = dp.getPort();
}
Socket s = new Socket("컴퓨터 이름", 10005);
OutputStream 출력 = s.getOutputStream();
FileInputStream fis = new FileInputStream("awf.jpg");
바이트[] buf = 새 바이트[1024];
int len = 0;
while ((len = fis.read(buf)) != -1) {
out.write(buf, 0, len);
}
// 데이터 전송을 중지합니다.
s.shutdownOutput();
ServerSocket ss = new ServerSocket(10005); //ss.accept() 메소드에는 차단 효과가 있습니다.
// accept() 메서드에서 얻은 각 소켓에 대해 별도의 스레드를 생성할 수 있습니다.