유닉스 환경 프로그래밍 tcp 통신
하나.서버 측:
1.cket(intdomain, int type, intprotocol): 플러그인 만들기;
2 .bind(intsockid,structsockaddr*addrp,socklenutaddrlen): 귀속 포트와 주소 정보;
3.listen(intsockid, intqsize): 플러그인 감청;
4.fd=accept(intsockid,structsockaddr*callerid,socklenut*addrlenp): 플러그인을 기다립니다.
5.recv(int fd,void*buf,size_t nbytes,int flags): 소켓에서 데이터 수신;
6.close (fd) 와close (sockid) 플러그인 닫기
2.클라이언트:
1. socket (): 소켓 만들기;
2.connect(int sockid,struct sockaddr *serv_addrp,socklenut addrlen): 서버에 연결;
3. send(int sockfd,const void*buf,size_t nbytes,int flags): 서버에 데이터를 보냅니다.
4. close(sockid);소켓 닫기
TCP 통신 서버 측 프로그램:
# include <stdio.h>
# include <sys/socket.h>
# include <arpa/inet.h>
# include <string.h>
# define MAX_SIZE 256
int main()
{
int err;
int listenfd,connfd;
struct sockaddr_in servaddr,clientaddr;
int n,addrlen=sizeof(struct sockaddr_in);
char addr[16];
char rbuf[MAX_SIZE];
char sbuf[MAX_SIZE]="hello from server";
inet_pton(AF_INET,"127.0.0.1",&servaddr.sin_addr);
memset(&servaddr,0,sizeof(servaddr));
servaddr.sin_family=AF_INET;
servaddr.sin_port=htons(10000);
listenfd=socket(AF_INET,SOCK_STREAM,0);
if(listenfd==-1)
{
perror("socket");
return -1;
}
err=bind(listenfd,(struct sockaddr*)&servaddr,sizeof(servaddr));
if(err==-1)
{
perror("bind");
return -1;
}
err=listen(listenfd,20);
if(err==-1)
{
perror("listen");
return -1;
}
while(1)
{
connfd=accept(listenfd,(struct sockaddr*)&clientaddr,(socklen_t*)&addrlen);
break;
}
n=recv(connfd,rbuf,MAX_SIZE,0);
if(n==-1)
{
perror("recv");
return -1;
}
rbuf[n]='\0';
printf("%s
",rbuf);
n=send(connfd,sbuf,strlen(sbuf)+1,0);
if(n==-1)
{
perror("send");
return -1;
}
close(connfd);
close(listenfd);
return 0;
}
클라이언트 프로그램:
# include <stdio.h>
# include <string.h>
# include <sys/socket.h>
# include <arpa/inet.h>
# define MAX_SIZE 256
int main()
{
int err;
int sockfd,n;
char rbuf[MAX_SIZE],sbuf[MAX_SIZE]="hello from client";
struct sockaddr_in servaddr;
memset(&servaddr,0,sizeof(servaddr));
servaddr.sin_family=AF_INET;
servaddr.sin_port=htons(10000);
inet_pton(AF_INET,"127.0.0.1",&servaddr.sin_addr);
sockfd=socket(AF_INET,SOCK_STREAM,0);
if(sockfd==-1)
{
perror("socket");
return -1;
}
err=connect(sockfd,(struct sockaddr*)&servaddr,(socklen_t)sizeof(servaddr));
if(err<0)
{
perror("connect");
return -1;
}
n=send(sockfd,sbuf,strlen(sbuf)+1,0);
if(n<0)
{
perror("send");
return -1;
}
n=recv(sockfd,rbuf,MAX_SIZE,0);
if(n<0)
{
perror("recv");
return -1;
}
rbuf[n]='\0';
printf("%s
",rbuf);
close(sockfd);
return 0;
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
React 구성 요소에서 소켓 이벤트 리스너가 여러 번 실행됩니다.기본적이지만 종종 간과되는 사이드 프로젝트를 하면서 배운 것이 있습니다. 이 프로젝트에는 단순히 두 가지 주요 부분이 포함되어 있습니다. 프런트 엔드: 반응 및 재료 UI 백엔드: Express, Typescript...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.