2. Linux 네트워크 프로그래밍 - socket 함수 및 C2S 구현
4021 단어 Linux 네트워크 프로그래밍
TCP 클라이언트: socket()->connect()->write()--->read()-->close()
2. 고객/서버가 고객이 보낸 정보를 반송한다.
3.socket 함수는 헤더 파일 기능을 포함합니다: 통신에 사용할 플러그인을 만듭니다.원형: int socket(int domain, int type, int protocol);매개 변수:domain: 통신 프로토콜족 (protocolfamily) 지정;type: socket 유형 지정, 스트림 소켓 SOCK_STREAM, 데이터 메시징 소켓 SOCK_DGRAM, 원본 소켓 SOCK_RAW; 프로토콜: 프로토콜 형식;반환값: 비음정수를 성공적으로 반환했습니다. 이것은 파일 설명자와 유사합니다. 우리는 그것을 인터페이스 설명자, 약칭 플러그인이라고 부릅니다.실패 반환-1;
4.bind 함수는 헤더 파일 기능을 포함합니다: 로컬 주소를 플러그인에 연결합니다.원형: intbind(intsockfd,conststructsockaddr*addr,socklenutaddrlen);매개 변수:sockfd:socket 함수가 되돌아오는 플러그인;addr: 연결할 주소;addrlen: 주소 길이;반환값: 0 반환 성공, 실패 반환-1;
5.listen 함수는 헤더 파일 기능을 포함합니다. 플러그인을 들어오는 연결을 감청하는 데 사용합니다.원형: int listen(int sockfd, int backlog);매개 변수:sockfd:socket 함수가 되돌아오는 플러그인;backlog: 이 플러그인에 대한 최대 연결 개수를 설정합니다.반환값: 0 반환 성공, 실패 반환-1;
6. accept 함수는 헤더 파일 기능을 포함합니다. 연결 대기열에서 첫 번째 연결을 되돌려줍니다. 연결 대기열이 비어 있으면 막습니다.원형: int accept(int sockfd,const struct sockaddr *addr,socklenut addrlen);매개 변수:sockfd:socket 함수가 되돌아오는 플러그인;addr: 연결할 주소;addrlen: 주소 길이;반환값: 비음정수를 성공적으로 반환하고 실패를 반환-1;
7.write 함수에 헤더 파일 포함
8.read 함수에 헤더 파일 포함
/*server side:begin
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;
#define ERR_EXIT(m) do{ perror(m); exit(EXIT_FAILURE);}while(0)
int main()
{
int sockfd = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if(sockfd<0)
ERR_EXIT("socket");
struct sockaddr_in servaddr;
memset(&servaddr, 0, sizeof(servaddr));
servaddr.sin_family = AF_INET;
servaddr.sin_port = htons(5188);
//servaddr.sin_addr.s_addr = htonl(INADDR_ANY);
servaddr.sin_addr.s_addr = inet_addr("127.0.0.1");
//inet_aton("127.0.0.1", &servaddr.sin_addr);
if(bind(sockfd, (struct sockaddr*)&servaddr, sizeof(servaddr)))
ERR_EXIT("bind");
int listenfd = listen(sockfd, SOMAXCONN);
if(listenfd<0)
ERR_EXIT("listen");
struct sockaddr_in peeraddr;
socklen_t peerlen = sizeof(peeraddr);
int conn = accept(sockfd, (struct sockaddr*)&peeraddr, &peerlen);
if(conn<0)
ERR_EXIT("accept");
char recvbuf[1024];
while(1)
{
memset(recvbuf, 0, sizeof(recvbuf));
int ret = read(conn, recvbuf, sizeof(recvbuf));
fputs(recvbuf, stdout);
write(conn, recvbuf, ret);
}
close(conn);
close(sockfd);
return 0;
}
server side:end*/
/*client side:begin
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;
#define ERR_EXIT(m) do{ perror(m); exit(EXIT_FAILURE);}while(0)
int main()
{
int sockfd;
if((sockfd=socket(AF_INET, SOCK_STREAM, IPPROTO_TCP))<0)
ERR_EXIT("socket");
struct sockaddr_in servaddr;
memset(&servaddr, 0, sizeof(servaddr));
servaddr.sin_family = AF_INET;
servaddr.sin_port = htons(5188);
servaddr.sin_addr.s_addr = inet_addr("127.0.0.1");
//inet_aton("127.0.0.1", &servaddr.sin_addr);
if(connect(sockfd, (struct sockaddr*)&servaddr, sizeof(servaddr))<0)
ERR_EXIT("connect");
char sendbuf[1024] = {0};
char recvbuf[1024] = {0};
while(fgets(sendbuf, sizeof(sendbuf), stdin) != NULL)
{
write(sockfd, sendbuf, strlen(sendbuf));
read(sockfd, recvbuf, sizeof(recvbuf));
fputs(recvbuf, stdout);
memset(&sendbuf, 0, sizeof(sendbuf));
memset(&recvbuf, 0, sizeof(recvbuf));
}
close(sockfd);
return 0;
}
client side:end*/
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
UNP 학습_I/O 복용의poll 함수 반사 서버 구현UNP 학습_I/O 복용의poll 함수 반사 서버 구현 1. 함수 원형: 2. 구현 코드 3. 폴의 장단점 장점: (1) 여러 설명자가 준비될 때까지 기다릴 수 있습니다.(2)poll은 설명자 수량의 상한 제한이 없...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.