C\#TCP 프로 토 콜 기반 SCOKET 통신 분석
4791 단어 Scoket
C\#TCP 프로 토 콜 기반 네트워크 통신
C\#TCP 프로 토 콜 을 기반 으로 하 는 네트워크 통신 을 하려 면 먼저 원 격 호스트 와 의 연결 을 구축 해 야 합 니 다.연결 주 소 는 보통 두 부분 을 포함 합 니 다.예 를 들 어www.yesky.com:80 에서 www.yesky.com 은 호스트 이름 이 고 80 은 호스트 의 80 포트 를 말 합 니 다.물론 호스트 이름 도 IP 주소 로 대체 할 수 있 습 니 다.연결 이 구축 되면 이 연결 을 사용 하여 패 킷 을 보 내 고 받 을 수 있 습 니 다.TCP 프로 토 콜 의 역할 은 이 패 킷 이 종점 에 도착 하고 정확 한 순서에 따라 조립 할 수 있 도록 하 는 것 입 니 다.
네.net framework 의 라 이브 러 리(Class Library)에 서 는 TCP 네트워크 통신 에 사용 되 는 두 가지 종 류 를 제공 합 니 다.각각 TcpClient 와 TcpListener 입 니 다.영어 적 의미 에서 알 수 있 듯 이 TcpClient 류 는 TCP 프로 토 콜 을 기반 으로 하 는 클 라 이언 트 류 이 고 TcpListener 는 서버 쪽 이 며 감청(Listen)클 라 이언 트 가 보 내 온 연결 요청 입 니 다.TcpClient 클래스 는 TCP 프로 토 콜 을 통 해 서버 와 통신 하고 정 보 를 가 져 옵 니 다.내부 에 Socket 클래스 의 인 스 턴 스 가 패키지 되 어 있 습 니 다.이 Socket 대상 은 TCP 프로 토 콜 을 사용 하여 서버 에 데 이 터 를 요청 하고 가 져 오 는 데 사 용 됩 니 다.원 격 호스트 와 의 상호작용 은 데이터 흐름 으로 나타 나 기 때문에 전 송 된 데 이 터 를 사용 할 수 있 습 니 다.net 프레임 워 크 중류 처리 기술 읽 기와 쓰기.다음 예 에서 네트워크 스 트림 류 를 사용 하여 데이터 흐름 을 조작 하 는 방법 을 볼 수 있 습 니 다.
다음 예 에서 저 희 는 서버 엔 드 프로그램 과 클 라 이언 트 프로그램 을 포함 한 시간 서버 를 만 들 것 입 니 다.서버 측 에서 클 라 이언 트 의 연결 요청 을 감청 하고 연결 을 구축 한 후 클 라 이언 트 에 현재 시스템 시간 을 보 냅 니 다.
서버 쪽 프로그램 을 먼저 실행 합 니 다.아래 캡 처 는 서버 쪽 프로그램 이 실행 중인 상황 을 보 여 줍 니 다.
그 다음 에 클 라 이언 트 프로그램 을 실행 합 니 다.클 라 이언 트 는 먼저 연결 요청 을 서버 측 에 보 내 고 서버 측 이 응답 한 후에 현재 시간 을 클 라 이언 트 에 보 냅 니 다.이것 은 클 라 이언 트 프로그램의 캡 처 입 니 다.
발송 완료 후 서버 에서 다음 연결 을 계속 기다 리 고 있 습 니 다:
이 예 를 통 해 우 리 는 TcpClient 류 의 기본 적 인 용법 을 알 수 있 습 니 다.이 종 류 를 사용 하려 면 System.Net.Socket 네 임 스페이스 를 사용 해 야 합 니 다.이 예 에 사 용 된 세 개의 네 임 스페이스 는 다음 과 같 습 니 다.
- using System;
- using System.Net.Sockets;
- using System.Text;
- //
- // , TcpClient :
-
- TcpClient client = new TcpClient(hostName, portNum);
- // TcpClient GetStream() , NetworkStream :
-
- NetworkStream ns = client.GetStream();
호스트 이름과 포트 번 호 를 사용 하여 TcpClient 클래스 의 인 스 턴 스 를 초기 화 할 때 서버 와 연결 이 되 어야 이 인 스 턴 스 가 진정 으로 만들어 지고 프로그램 이 아래로 실 행 될 수 있 습 니 다.네트워크 가 통 하지 않 고 서버 가 존재 하지 않 으 며 서버 포트 가 열 리 지 않 아 연결 이 되 지 않 으 면 프로그램 이 이상 을 던 지고 실행 을 중단 합 니 다.
데이터 흐름 을 만 든 후에 우 리 는 NetworkStream 류 의 read()방법 으로 흐름 에서 데 이 터 를 읽 고 Write()방법 으로 흐름 에 데 이 터 를 기록 할 수 있 습 니 다.데 이 터 를 읽 을 때 먼저 버퍼 를 만들어 야 합 니 다.구체 적 으로 말 하면 byte 형 배열 을 만들어 서 흐름 에서 읽 은 데 이 터 를 저장 하 는 것 입 니 다.Read()방법의 원형 설명 은 다음 과 같다.
- public override int Read(in byte[] buffer,int offset,int size)
buffer 는 버퍼 배열 입 니 다.offset 은 데이터(바이트 흐름)가 버퍼 배열 에 저 장 된 시작 위치 입 니 다.size 는 읽 은 바이트 수 이 고 반환 값 은 읽 은 바이트 수 입 니 다.이 예 에서 서버 피드백 정 보 를 간단하게 읽 습 니 다.
- byte[] bytes = new byte[1024];//
- int bytesRead = ns.Read(bytes, 0, bytes.Length);//
- // :
- Console.WriteLine(Encoding.ASCII.GetString(bytes,0,bytesRead));
- // :
-
- client.Close();
C\#TCP 프로 토 콜 기반 네트워크 통신 을 소개 합 니 다.