유닉스 환경 프로그래밍 tcp 통신

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; }

좋은 웹페이지 즐겨찾기