Android 에서 TCP 와 UDP 전송 인 스 턴 스 구현

7465 단어 AndroidTCPUDP
TCP 와 UDP 는 네트워크 전송 에서 매우 중요 하 며,안 드 로 이 드 개발 에서 도 마찬가지 로 중요 하 다.
우선 TCP 와 UDP 가 무엇 인지 살 펴 보 겠 습 니 다.
TCP 가 뭐 예요?
TCP:Transmission Control Protocol 전송 제어 프로 토 콜 TCP 는 연결(연결 가이드)을 위 한 신뢰 할 수 있 고 바이트 흐름 기반 의 운송 층(Transport layer)통신 프로 토 콜 로 IETF 의 RFC 793 설명(specified)이 있다.간단 한 컴퓨터 네트워크 OSI 모델 에서 4 층 전송 층 이 지정 한 기능 을 완성 합 니 다.응용 층 은 TCP 층 에 네트워크 간 전송 에 사용 되 는 8 비트 바이트 로 표 시 된 데이터 흐름 을 보 낸 다음 TCP 는 데이터 흐름 을 적당 한 길이 의 메시지 세그먼트 로 나 누 었 다.이후 TCP 는 결과 패 키 지 를 IP 층 에 전송 하고 네트워크 를 통 해 패 키 지 를 수신 단 실체의 TCP 층 에 전송 합 니 다.TCP 는 패 키 지 를 잃 어 버 리 지 않도록 모든 바이트 에 하나의 번 호 를 주 고 번 호 는 수신 단 실체 로 전송 되 는 패 키 지 를 순서대로 받 도록 보장 합 니 다.그리고 수신 단 실 체 는 성공 적 으로 받 은 바이트 에 대해 해당 하 는 확인(ACK)을 보 냅 니 다.송신 단 실체 가 합 리 적 인 왕복 지연(RTT)내 에서 확인 되 지 않 으 면 해당 하 는 데이터(잃 어 버 렸 다 고 가정)가 다시 전 송 됩 니 다.TCP 는 데이터 에 오류 가 있 는 지 검사 하고 함수 로 검사 합 니 다.보 내 고 받 을 때 체크 섬 을 계산 해 야 합 니 다.
먼저,TCP 가 연결 을 구축 한 후에 통신 쌍방 은 데이터 전송 을 동시에 할 수 있 고 그 다음 에 그 는 모두 양 방향 이다.신뢰성 을 확보 하 는 데 있어 서 시간 초과 전송 과 테이프 확인 체 제 를 사용한다.
데이터 제어 에 있어 미끄럼 창 프로 토 콜[1]을 사용 합 니 다.프로 토 콜 에 서 는 창 내 확인 되 지 않 은 그룹 에 대해 재 전송 이 필요 하 다 고 규정 하고 있 습 니 다.
혼잡 제어 에 있어 서 느 린 시작 알고리즘 을 채택 하 다.
UDP 가 뭐 예요?
UDP 는 User Datagram Protocol 의 약칭 으로 중국어 이름 은 사용자 패 킷 프로 토 콜 이 며 OSI 참조 모델 중 연결 되 지 않 은 전송 계층 프로 토 콜 로 사 무 를 위 한 간단 하고 신뢰 할 수 없 는 정보 전송 서 비 스 를 제공 합 니 다.IETF RFC 768 은 UDP 의 공식 규범 이다.네트워크 에 서 는 TCP 프로 토 콜 과 마찬가지 로 패 킷 을 처리 하 는 데 사 용 됩 니 다.OSI 모델 에서 4 층-전송 층 은 IP 프로 토 콜 의 상위 층 에 있 습 니 다.UDP 는 데이터 패 킷 의 정렬,조립,패 킷 에 대한 정렬 을 제공 하지 않 는 단점 이 있다.즉,메 시 지 를 보 낸 후 안전하게 도 착 했 는 지 알 수 없다 는 것 이다.UDP 는 컴퓨터 간 에 데 이 터 를 전송 해 야 하 는 네트워크 응용 을 지원 합 니 다.네트워크 화상 회의 시스템 을 포함 한 수많은 고객/서버 모드 의 네트워크 애플 리 케 이 션 은 UDP 프로 토 콜 을 사용 해 야 한다.UDP 프로 토 콜 은 출시 된 지 이미 여러 해 가 되 었 다.비록 최초의 광 채 는 일부 유사 한 프로 토 콜 에 의 해 가 려 졌 지만 오늘날 에 도 UDP 는 매우 실 용적 이 고 실행 가능 한 네트워크 전송 층 프로 토 콜 이 라 고 할 수 있다.
잘 알려 진 TCP(전송 제어 프로 토 콜)프로 토 콜 과 마찬가지 로 UDP 프로 토 콜 은 IP(인터넷 프로 토 콜)프로 토 콜 의 맨 위 에 직접 있 습 니 다.OSI(개방 시스템 상호 연결)참조 모델 에 따 르 면 UDP 와 TCP 는 모두 전송 계층 프로 토 콜 에 속한다.
UDP 프로 토 콜 의 주요 역할 은 네트워크 데이터 트 래 픽 을 데이터 신문 형식 으로 압축 하 는 것 이다.전형 적 인 데이터 신문 은 바 이 너 리 데이터 의 전송 단위 이다.모든 데이터 신문 의 앞의 8 개의 바 이 트 는 헤더 정 보 를 포함 하고 나머지 바 이 트 는 구체 적 인 전송 데 이 터 를 포함한다.
TCP 와 UDP 가 안 드 로 이 드 에서 사용 하 는 것 은 자바 에서 사용 하 는 것 과 완전히 같다.
먼저 TCP 연결 을 살 펴 보 겠 습 니 다.아래 그림 은 TCP 연결 의 설명도 입 니 다.

이해 하기 쉽 지 않 습 니까?여 기 는 더 이상 말 하지 않 겠 습 니 다.코드 를 직접 보 세 요!실천 에서 참된 지식 이 나온다.
TCP 서버 엔 드 코드:

try { 
            Boolean endFlag = false; 
            ServerSocket ss = new ServerSocket(12345); 
            while (!endFlag) { 
                //  
                Socket s = ss.accept(); 
                BufferedReader input = new BufferedReader(newInputStreamReader(s.getInputStream())); 
                // true flush, output.flush() 
                PrintWriter output = newPrintWriter(s.getOutputStream(),true); 
                String message = input.readLine(); 
                Log.d("Tcp Demo", "message from Client:"+message); 
                output.println("message received!"); 
                //output.flush(); 
                if("shutDown".equals(message)){ 
                    endFlag=true; 
                } 
                s.close(); 
            } 
            ss.close(); 

        } catch (UnknownHostException e) { 
            e.printStackTrace(); 
        } catch (IOException e) { 
            e.printStackTrace(); 
        }

TCP 클 라 이언 트 코드:

try { 
            Socket s = new Socket("localhost", 12345); 
            // outgoing stream redirect to socket 
            OutputStream out = s.getOutputStream(); 
            // true flush, out.flush() 
            PrintWriter output = new PrintWriter(out, true); 
            output.println("Hello IdeasAndroid!"); 
            BufferedReader input = new BufferedReader(newInputStreamReader(s 
                    .getInputStream())); 
            // read line(s) 
            String message = input.readLine(); 
            Log.d("Tcp Demo", "message From Server:" + message); 
            s.close(); 

        } catch (UnknownHostException e) { 
            e.printStackTrace(); 
        } catch (IOException e) { 
            e.printStackTrace(); 
        }

다음은 UDP 를 살 펴 보 겠 습 니 다.

UDP 서버 엔 드 코드:

// UDP  
        Integer port = 12345; 
        // ,  
        byte[] message = new byte[1024]; 
        try { 
            // Socket  
            DatagramSocket datagramSocket = new DatagramSocket(port); 
            DatagramPacket datagramPacket = new DatagramPacket(message, 
                    message.length); 
            try { 
                while (true) { 
                    //  
                    datagramSocket.receive(datagramPacket); 
                    Log.d("UDP Demo", datagramPacket.getAddress() 
                            .getHostAddress().toString() 
                            + ":" + new String(datagramPacket.getData())); 
                } 
            } catch (IOException e) { 
                e.printStackTrace(); 
            } 
        } catch (SocketException e) { 
            e.printStackTrace(); 
        }
UDP 클 라 이언 트 코드:

public static void send(String message) { 
        message = (message == null ? "Hello IdeasAndroid!" : message); 
        int server_port = 12345; 
        DatagramSocket s = null; 
        try { 
            s = new DatagramSocket(); 
        } catch (SocketException e) { 
            e.printStackTrace(); 
        } 
        InetAddress local = null; 
        try { 
            // IP 
            local = InetAddress.getByName("localhost"); 
        } catch (UnknownHostException e) { 
            e.printStackTrace(); 
        } 
        int msg_length = message.length(); 
        byte[] messagemessageByte = message.getBytes(); 
        DatagramPacket p = new DatagramPacket(messageByte, msg_length, local, 
                server_port); 
        try { 
            s.send(p); 
        } catch (IOException e) { 
            e.printStackTrace(); 
        } 
    }
코드 에서 주의해 야 할 부분 에 주석 을 달 았 습 니 다.본 고 는 당신 에 게 도움 이 되 기 를 바 랍 니 다!

좋은 웹페이지 즐겨찾기