Android 에서 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();
}
}
코드 에서 주의해 야 할 부분 에 주석 을 달 았 습 니 다.본 고 는 당신 에 게 도움 이 되 기 를 바 랍 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Bitrise에서 배포 어플리케이션 설정 테스트하기이 글은 Bitrise 광고 달력의 23일째 글입니다. 자체 또는 당사 등에서 Bitrise 구축 서비스를 사용합니다. 그나저나 며칠 전 Bitrise User Group Meetup #3에서 아래 슬라이드를 발표했...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.