TCP 클라이언트 - 서버 프로그래밍 모델

1. 클라이언트는 순서를 호출

다음과 같이 클라이언트 프로그래밍 순서는 다음과 같습니다

  1. 소켓을 작성하는 소켓 함수를 호출
  2. 연결 서버 연결을 전화
  3. 는 I / O 기능 (쓰기 / 읽기) 및 서버 측 통신 전화
  4. 가까운 소켓을 호출하는 폐쇄

2. 서버 측 호출 시퀀스

다음과 같이 서버 프로그래밍 순서는 다음과 같습니다

  1. 소켓을 작성하는 소켓 함수를 호출
  2. 통화 바인드 바인드 로컬 주소와 포트
  3. 시작 통화 듣기를 듣고
  4. 호출이 연결된 큐에서 추출 된 클라이언트 연결을 수락
  5. 는 I / O 기능 (읽기 / 쓰기) 클라이언트와 통신하는 전화
  6. 닫기 기능은 소켓을 닫 전화

3. 공통 기능

3.1. 소켓과 어드레스 결합 기능

(1) 결합 어드레스

사용법 #include <SYS / socket.h>

INT 바인드 (INT sockfd와, CONST 구조체 SOCKADDR * ADDR, socklen_t이 LEN);

반환 값 : 성공 반환 0, -1 오류

특별 바인드 주소 소개

당신은 특별한을 사용하는 데 필요한 모든 인터페이스에 연결 요청에 응답하도록하려면 우리는 단지 주소에 대한 연결 요청에 대해 신경 경우 호스트가 여러 네트워크 인터페이스와 여러 개의 IP 주소를 가질 수 있습니다, 우리는 특정 지역의 IP 주소를 지정할 수 있습니다 주소 INADDR_ANY

#DEFINE INADDR_ANY (uint32_t)을 0x00000000

얻은 모든 IP의 서버에 연결 요청을 들어

servaddr를 sockaddr_in 구조체;

memset 함수 (servaddr, 0는 sizeof (servaddr));

servaddr.sin_addr.s_addr = INADDR_ANY;

3.2. 소켓에 바인드 주소 찾기

사용법 #include <SYS / socket.h>

INT는 getsockname (INT sockfd와, 구조체 SOCKADDR restrict_addr *, *의 socklen_t restrict_alenp);

반환 값 : 성공 반환 0, -1 오류

3.3. 다른 주소 가져 오기

getpeername는 INT (INT sockfd와, 구조체 SOCKADDR restrict_addr *, *의 socklen_t restrict_alenp);

반환 값 : 성공 반환 0, -1 오류

3.4. 서버 측에 연결을 설정하려면

사용법 #include <SYS / socket.h>

int listen(int sockfd, int backlog);

返回:成功返回0,出错返回-1。

backlog指定进行客户端连接排队的队列长度。

int accept(int sockfd, struct sockaddr *restrict_addr, socklen_t *restrict_len);

返回:成功返回一个新的sockfd(客户端的)。

3.5.客户端请求连接

#include <sys/socket.h>

int connect(int sockfd, const struct sockaddr *addr, socklen_t len);

返回:成功返回0,出错返回-1

3.6.IO操作函数

read和write函数默认都是阻塞性的读写函数。此时需要考虑服务器的并发处理。

4.服务器端并发性处理

4.1.多进程模型

弊端:进程占用系统资源,当子进程过多将占用过多的系统资源,难以处理大并发的场景。

4.2.多线程模型

以分离状态去启动子线程,子线程运行完后自动释放空间。

추천

출처www.cnblogs.com/mrlayfolk/p/11968446.html