--tcp 포인트 요약 프로그래밍 리눅스 네트워크 프로그래밍의 기본

네트워크 프로그래밍의 기본 사항에 대해, 내가 볼 수 있습니다 관심이 이전 블로그를 요약한다 : 네트워크 프로그래밍 - 기본 요약
TCP 전송 계층 프로토콜 (전송 제어 프로토콜)는 연결 지향, 신뢰할 수있는, DE입니다, 단어 기반 전송 계층 통신 프로토콜은 스로틀
호스트 포트 사이의 연결을 설정하기 위해, 전송 계층에 속하는 일곱 계층 모델에.

그림 삽입 설명 여기

TCP 프로그래밍 단계

일반 절차 서버

도 1은, 소켓 함수 ()와 소켓을 생성하는
2 소켓 특성, 기능은 setsockopt ()를 설정하는 단계; * 옵션
소켓 함수 바인딩 ()의 IP 주소와 포트 3, 바인딩 정보를]
. (4)를 개방 모니터링 기능에 의해 ()를 듣고,
. 5) (수락 기능에서 제공하는 고객을 받도록 연결된다
. 6, 전송 및 데이터, 함수 보내기 ()와 RECV (), () 읽기 및 쓰기 ()를받을;
. 7, 폐쇄 네트워크 접속,
8, 근접 모니터;

일반적으로 클라이언트는 단계

도 1은, 소켓 함수 ()와 소켓을 생성하는
2 소켓 특성, 기능은 setsockopt ()를 설정하는 단계; * 옵션
3 소켓 함수 바인딩 ()의 IP 주소와 포트 정보를 결합 * 옵션
(4)이, 다른 쪽의 IP 주소 및 포트의 속성 세트가 접속되는,
(5), 연결 서버에 연결하는 기능을 ()
. (6), 송신 데이터, 함수 송신 () 및 RECV () 또는 리드 () 및 쓰기 ()를 수신하고;
7, 네트워크 연결 해제;

소켓 기능

소켓 기능

int socket(int domin int type int protocol);

파라미터 :
①domin
그림 삽입 설명 여기
②type
[고유 TCP 스트림에 대응하는 소켓] SOCK_STREAM는
UDP에 해당 : 단일 그램 소켓 [SOCK_DGRAM]
SOCK_RAM : 원시 소켓
③protocol
통상 0 가득 원래 소켓 프로그램을 작성해야

반환 값은
VALUE의 RETURN
ON 성공, 새로운 새로운 소켓이 오류 returned.On위한 파일 기술자는 반환 -1, errno를 적절히 설정되고
반환 성공에 파일 설명, 에러시 -1.

바인딩 () 함수

기계의 소켓 기술자와 관련된 포트 (전용 서버)

int bind(int sockefd, const strict sockaddr*addr, sockelen_t addrlen);

파라미터 :
sockfd와 : 소켓 디스크립터 소켓 디스크립터를 통해 얻기 함수
주소 : SOCKADDR 구조체의 가변 구조의 어드레스
addrlen =를 sizeof (구조체 aockaddr)

struct sockaddr{
sa_family;
char sa_data(14);
}

반환 값 : 0 = 성공, 실패 = -1; ERNO은 = 오류 번호가
없는 점유 다음과 같은 과제의 IP 주소와 인수 임의의 포트 번호를 자동으로 획득 할 수 있습니다
addr.sin_port = 0 / 시스템이 무작위로 선택되지 않습니다 포트 번호 /
addr.sin_.s_addr = INADR_ANY / 충전 로컬 IP 주소 /

연결 기능

(클라이언트 용) 원격 서버와의 TCP 연결을 설정합니다

int connect(int sockfd, struct sockaddr *serv_addr, int addrlen);

기술자 sockt sockfd와 목적 서버
대로 serv_addr 개체 포인터 IP 주소와 포트 번호가 포함되어 있습니다.
반환 값 : 0 = 성공, 실패 = -1, errno를 = 오류 번호.

기능을 듣고

() 바인딩에 대한 서비스 요구가 있는지를 듣고 후

int listen(int sockefd, int backlog);

파라미터 :
sockfd와 : 소켓 () 함수는 FD 얻을
잔고 5 일반적 가득, 여러 클라이언트와 서버의 접속 방법, 즉 시험 (8)의 최대의 통과를 허용하면서 ARM의
코어 서버는 두 개의 소켓 디스크립터를 유지 리스트 (번호 = 2 * 잔고 + 1)
확립 된 클라이언트리스트 좋은 연결 (악수가 좋은 플라이 newfd 완성 된 3 방향)
결과 :
성공 : 0] 에러 1

기능을 수용

클라이언트 연결 요청에 대한 블록 대기

int accept(int sockefd, struct sockaddr *addr,sockelen_t*addrlen);

매개 변수 :
scokefd : 이전 소켓 () 후 (FD)와 바인딩 (), 듣고 () 제공을 통해
주소 : 구조체 SOCKADDR의 주소 구조 변수
주소 길이 : addrlen
반환 값 :
성공 : 반환 설립 newfd 좋은 연결
실패 : -1

리드 (), 쓰기 () 함수

ssize_t read(int fd, void *buf, size_t count);
ssize_t write(int fd, const void *buf, size_t count);

읽다():

  • 읽기 기능은 FD에서 콘텐츠를 읽기에 대한 책임

  • 읽기가 성공하면 실제로 읽어 반환에게 바이트 수를 읽어

  • 반환 값은 파일의 단부가 판독 된 0 수단 인 경우, 0보다 적은 오류 것을 나타낸다

  • 오류가 단말기에 의해 야기되는 경우 EINTR 기술되어 있으므로 네트워크 연결 문제 ECONNREST로 표시되면

  • 쓰다():

  • 쓰기 기능 바이트 nbytes는 파일 기술자 fd 버피의 내용을 작성하는

  • 실패와 세트 errno 변수에 반환 값 성공에 쓰여진 바이트 수, -1

  • 우리는 소켓의 파일 기술자에 쓸 때 네트워크 프로그래밍에서, 두 가지 가능성이있다 :

    • (1) 기록 데이터 중 일부 또는 전부를 나타내는 반환 값> 0 쓰기
    • 2, 반환 값은 <0이면 오류가 발생 갖는다
  • EPIPE 네트워크 연결에 문제가있는 경우 (다른 쪽의 연결을 종료했다) 오류가 오류 인 경우 EINTR는 작성 시점에서 중단 것을 나타낸다

보내기 기능

의 정보 송신 연결 소켓 (TCP)에서,
INT 송신 (INT는 CONST 공극 *의 MSG, INT 렌 플래그를 INT, sockfd와)
sockfd와이 송신 데이터 소켓 디스크립터를 사용하는
데이터에 대한 포인터의 포인터가 전달 될 MSG.
렌은 데이터의 길이 (바이트)입니다.
플래그는 정상적인 상황에서 0으로 설정합니다.

RECV 기능

의 (TCP) 접속 소켓에서 데이터를 수신하는
INT에게 RECV을 (INT는 무효 * 버피, sockfd와 INT 렌 플래그 부호 INT)는,
데이터 소켓 디스크립터를 수락 sockfd와;
(BUF)는 수신 데이터를 저장하는 버퍼이다
렌 버퍼링 길이.
플래그는 0으로 설정.
반환 값 : 연결이 중단되는 경우 바이트 수 실제로 수신, 0을 반환. 오류가 발생하고, 해당 창 errno는 -1 값을 설정하는 경우.

sendto를 기능

패턴 데이터는 소켓 (UDP) 연결형으로 송신
상기 sendto를에서 INT (INT는 CONST 공극 *의 MSG를 sockfd와 것은 INT 렌 부호 INT 플래그는 CONST * INT tolen 독립하도록 SOCKADDR를 구조체)
IP 주소를 나타내며, 포트는 컴퓨터로 향할 번호 정보
= tolen 독립를 sizeof (SOCKADDR 구조체).
결과 : 데이터의 바이트 길이가 실제로 송신 -1시 전송 오류.

에 recvfrom 기능

소켓 방식으로의 연결형 (UDP) 데이터를 수신하면
(fromlen의 * INT로부터 * INT는 플래그는 SOCKADDR를 구조체 INT 렌 부호 INT, 무효 * 버피를 sockfd와)의 INT에 recvfrom,
IP 주소 및 포트 번호 저장된 소스 기기에서.
fromlen =를 sizeof (SOCKADDR 구조체).
반환 값 : 데이터의 수는 실제 예금에서 바이트. -1을 돌려 에러가 발생하고 해당 errno를 설정합니다 때.

가까운 기능

모든 데이터 조작의 중지, 소켓을 해제
가까운 (sockfd와를);

셧다운 기능

근접 방식으로 연결을
종료 INT는 (어떻게 INT는 INT를 sockfd와)
다음과 같은 값으로 설정할 수 있습니다 방법 :
1.0 ------- 데이터를 계속받을 수
계속할 수 - 전송 데이터를 1 -------.
* 2 ------- 데이터를 송수신 계속 허용,) (닫기라고 허용되는
오류가 발생하면 -1 (병치 된 errno에 해당) 작업 종료 반환 성공하면 0이 돌아왔다.

gethostbyname까지도 기능

도메인 이름과 IP 주소 변환
구조체 상응하는 hostent * gethostbyname까지도 (const를 숯불 * 이름);

inet_pton 기능

이진 값 네트워크 바이트 순서 변환 점선 진수 문자열, IPv4와 IPv6 주소의 기능을 처리 할 수있다.
INT inet_pton (INT 가족 CONST CHAR * StrPtr 함수 무효 *의 addrptr는)
첫번째 파라미터 일 수있다 AF_INET6 AF_INET 또는 : 두번째 파라미터 문자열 소수점 포인터에 대한 포인터이다 세번째 파라미터 변환에 대한 포인터 이진 값 포인터 네트워크 바이트 순서.
반환 값 : 1 - 0 - 성공 표현 형식은 유효한 입력 오류가 아닌 -1-

inet_ntop 기능

그리고 기능 반대 inet_pton, inet_ntop 기능은 네트워크 바이트 순서에 이진 값이 진수 문자열을 점선 변환하는 것입니다.
CONST CHAR * inet_ntop (INT 가족 CONST 공극 *의 addrptr 숯불 * StrPtr 함수, size_t와 LEN)
첫번째 파라미터는 AF_INET 또는 AF_INET6 수있다 : 두 번째 파라미터는 네트워크 바이트 순서 이진 값에 대한 포인터를 가리키는 셋째 파라미터 변환 스트링 포인터 소수점 후의 점이다 네번째 파라미터는 오버 플로우되는 함수 호출 버퍼 방지하기 위해, 타겟의 크기이다.
반환 값 : 결과에 대한 포인터 포인트 - 성공 널 (null) 종료 실패

게시 28 개 원래 기사 · 원 찬양 5 · 조회수 3717

추천

출처blog.csdn.net/qq_42711899/article/details/104422740