1. 기본 네트워크 개념
먼저, 개념 : 네트워크 프로그래밍을 명확히하십시오! = 웹 사이트 프로그래밍, 네트워크 프로그래밍을 일반적으로 TCP/IP 프로그래밍이라고합니다.
2. 네트워크 통신 프로토콜 및 인터페이스
3. 커뮤니케이션 프로토콜 계층화 아이디어
4. 참조 모델
V. IP 프로토콜
모든 사람의 컴퓨터에는 고유 한 IP 주소가있어 서로 통신 할 때 오류 메시지가 전송되지 않습니다.
IP 주소는 4 개의 세그먼트로 하나의 점으로 나뉩니다. 컴퓨터 내부의 IP 주소는 4 바이트로 표시됩니다. 하나의 바이트는 세그먼트를 나타내고, 각 바이트로 표시되는 최대 숫자는 255에만 도달 할 수 있습니다.
VI. TCP 프로토콜 및 UDP 프로토콜
TCP 및 UDP는 동일한 레이어에 위치하고 둘 다 IP 계층을 기반으로합니다. 두 컴퓨터마다 IP 주소가 다르기 때문에 두 컴퓨터를 구별 할 수 있으며 서로 대화 할 수 있습니다. 말하는 방법에는 일반적으로 두 가지가 있습니다. 첫 번째는 TCP이고 두 번째는 UDP입니다. TCP는 신뢰할 수있는 연결입니다. TCP는 전화를하는 것과 같습니다. 먼저 상대방에게 전화를 걸어 상대방과 계속 대화하기 전에 상대방이 응답 할 때까지 기다려야합니다. 즉, 메시지를 보내기 전에 메시지를 보낼 수 있는지 확인해야합니다. TCP는 신뢰할 수있는 것을 업로드합니다. 두 컴퓨터에 연결되는 한 머신에 전송 된 데이터는 상대방의 기계로 전송됩니다. UDP는 전보를 보내는 것과 같으며 발송되면 완료됩니다. 상대방이 그것을 받는지 여부는 중요하지 않으므로 UDP는 신뢰할 수 없습니다. TCP는 데이터를 안정적으로 전송하지만 천천히 전송됩니다. UDP는 데이터를 신뢰할 수 없게하지만 빠르게 전송됩니다.
7. 소켓 프로그래밍
일반적으로 네트워크 프로그래밍을 소켓 프로그래밍이라고하며 소켓은 영어로 "소켓"을 의미합니다.
두 컴퓨터에 소켓을 설치 한 다음 두 컴퓨터의 소켓에 케이블의 두 끝을 연결하여 두 컴퓨터가 연결을 설정할 수 있도록하십시오. 이 소켓은 소켓입니다.
그들이 서로 의사 소통 할 수 있기 때문에 나는 당신이 내 서버라고 말했지만 논리적으로, 나는 당신에게 먼저 물건을 보내야한다. 그리고 당신은 그것들을 처리하고 전달할 것이다. 그래서 당신은 그것을 서버라고 부릅니다. 그러나 기술적 인 의미에서 TCP만이 서버와 클라이언트를 나눕니다. UDP의 경우 엄격한 의미에서 소위 서버와 클라이언트가 없습니다. TCP 서버의 소켓을 Serversocket이라고하며 클라이언트의 소켓을 소켓이라고합니다.
두 컴퓨터가 서로 연결되면 먼저 IP 주소를 알아야하지만 IP 주소 만 제공하는 것만으로는 충분하지 않습니다. 또한 연결의 포트 번호, 즉 응용 프로그램에 연결 해야하는 포트 번호가 있어야합니다.
포트 번호는 기계의 다른 응용 프로그램을 구별하는 데 사용됩니다. 포트 번호는 컴퓨터 내부에서 2 바이트를 차지합니다. 기계에는 최대 65536 포트 번호가 있습니다. 응용 프로그램은 여러 포트 번호를 차지할 수 있습니다. 포트 번호가 응용 프로그램에 의해 점유되면 다른 응용 프로그램은 더 이상이 포트 번호를 사용할 수 없습니다. 우리가 쓰는 프로그램이 포트 번호를 차지 해야하는 경우, 1024 이상의 포트 번호를 차지하려면 시스템이 언제든지 요청 될 수 있으므로 1024 미만의 포트 번호를 차지하지 마십시오. 포트 번호 자체는 TCP 포트 및 UDP 포트로 나뉩니다. TCP 포트 8888 및 UDP 포트 8888은 완전히 다른 포트입니다. 65536 TCP 포트 및 UDP 포트가 있습니다.
8. TCP 소켓 통신 모델
9. 소켓 사용 예제
서버 코켓
import java.net.*; import java.io.*; public class testserversocket {public static void main (String Args [])은 예외 {serversocket ss = new serversocket (6666); /* 서버 소켓 객체를 만들 때 종종 포트 번호가 할당됩니다. 의미는 새 서버 소켓 객체를 사용해야하는 포트 번호와 클라이언트의 연결을들을 수있는 포트 번호를 사용하는 것입니다. 따라서 포트 번호를 지정하는 의미는 서버 소켓 객체가 클라이언트의 연결에 자리 잡는 컴퓨터를 알려주는 것입니다. */ * 서버 측은 클라이언트의 연결 요청을 지속적으로 수신하므로 서버 측 프로그래밍은 일반적으로 죽은 루프이며 끝없이 실행됩니다. */ while (true) {소켓 s = s.accept (); /*클라이언트의 연결 객체를 수락하려면 서버 측의 accept () 메소드를 호출하십시오. accept () 메소드는 차단 방법입니다. 나는 클라이언트가 연결을 신청하는지 어리석게 기다렸다. 그런 다음 서버 측의 소켓 소켓은 클라이언트의 소켓 소켓과 연결을 설정합니다. * / /* 클라이언트가 서버 측에 연결할 수 있는지 여부는 서버 측이 클라이언트의 연결 요청을 수락하는지 여부에 따라 다릅니다. 클라이언트가 연결 요청을 수락하는 경우 서버 측에 소켓 소켓을 설치 하여이 소켓을 통해 클라이언트와 연결을 설정하고 서로 통신합니다. */ system.out.println ( "클라이언트 연결!"); /* 입력 스트림 스트림을 사용하여 클라이언트로부터 전송 된 정보를 수신하고 DataInputStream 데이터 스트림을 사용하여 수신 된 정보를 처리*/ datainputStream dis = new DatainputStream (s.getInputStream ()); /* readUtf 사용 (메소드는 모든 수신 된 정보를 읽고 변수 STR에 저장하여 readUtf () 메소드도 차단 방법입니다. 클라이언트가 정보를 보내기를 어리석게 기다린 다음 수신 정보를 읽습니다. 클라이언트가 무언가를 작성하지 않으면 클라이언트가 무언가를 쓸 때까지 서버가 쓸 수 없게됩니다. 다른 클라이언트가 서버에 연결하려는 경우, 서버 측에서 accept () 메소드를 호출해야합니다. 정보를 읽을 수 있습니다. 서버 측 프로그램은 다음 루프를 수행 할 수 없으므로 다른 클라이언트는 서버 측면에 연결할 수 없습니다. 클라이언트 소켓
import java.net.*; import java.io.*; public class testclientsocket {public static void main (String Args []) 예외 {소켓 s = 새로운 소켓 ( "127.0.0.1", 6666); /*클라이언트는 서버쪽에 연결하는 데 적용* / /*서버 측에 연결 한 후 서버 측에 정보를 출력하고 서버 측에서 반환 된 정보를 수신하고 정보 출력 정보를 수신하고 반환 정보를받을 수 있습니다. 스트림 입력 및 출력 원리는 정보를 처리하는 데 사용되어야합니다*//*여기서 출력 스트림 출력 스트림 출력 정보는 서버 측*/ outputStream os = S.GetOutputStream (); DataOutputStream dos = 새로운 DataOutputStream (OS); Thread.Sleep (30000);/*클라이언트는 30 초 동안 잠을 자고 서버에 정보를 보내십시오*/ dos.writeUtf ( "Hello Server!"); }}클라이언트는 포트 6666을 통해 서버에 대한 연결을 요청합니다. 서버가 클라이언트의 연결 요청을 수락 한 후 서버에 소켓을 설치 한 다음이 소켓을 클라이언트 소켓과 연결하여 서버가 클라이언트와 통신 할 수 있도록합니다. 다른 클라이언트가 연결을 신청하면 서버가 수락 한 후 클라이언트의 소켓에 연결하기 위해 다른 소켓이 설치됩니다.