단순 순환 서버 구현
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define MAXLINE 4096
int main(int argc, char** argv)
{
int sockfd, n,rec_len;
char recvline[4096], sendline[4096];
char buf[MAXLINE];
struct sockaddr_in servaddr;
//
if( (sockfd = socket(AF_INET, SOCK_STREAM, 0)) < 0){
printf("create socket error: %s(errno: %d)
", strerror(errno),errno);
exit(0);
}
// servaddr , 0
memset(&servaddr, 0, sizeof(servaddr));
//
servaddr.sin_family = AF_INET;
servaddr.sin_addr.s_addr = inet_addr("127.0.0.1");
servaddr.sin_port = htons(8000);
// servaddr.sin_addr.s_addr = htonl(INADDR_ANY);//IP INADDR_ANY, IP 。
//
if( connect(sockfd, (struct sockaddr*)&servaddr, sizeof(servaddr)) < 0){
printf("connect error: %s(errno: %d)
",strerror(errno),errno);
exit(0);
}
printf("send msg to server:
");
fgets(sendline, 4096, stdin);
//
if( send(sockfd, sendline, strlen(sendline), 0) < 0)
{
printf("send msg error: %s(errno: %d)
", strerror(errno), errno);
exit(0);
}
//
if((rec_len = recv(sockfd, buf, MAXLINE,0)) == -1) {
perror("recv error");
exit(1);
}
buf[rec_len] = '\0';
printf("Received : %s ",buf);
//
close(sockfd);
exit(0);
}
2. 서버 섹션:
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define DEFAULT_PORT 8000
#define MAXLINE 4096
int main(int argc, char** argv)
{
int socket_fd, connect_fd;
struct sockaddr_in servaddr, remotaddr;
char buff[4096];
int n;
// Socket
if( (socket_fd = socket(AF_INET, SOCK_STREAM, 0)) == -1 ){
printf("create socket error: %s(errno: %d)
",strerror(errno),errno);
exit(0);
}
//
memset(&servaddr, 0, sizeof(servaddr));
servaddr.sin_family = AF_INET;
servaddr.sin_addr.s_addr = htonl(INADDR_ANY);//IP INADDR_ANY, IP 。
servaddr.sin_port = htons(DEFAULT_PORT);// DEFAULT_PORT
servaddr.sin_addr.s_addr = inet_addr("127.0.0.1");
//
if( bind(socket_fd, (struct sockaddr*)&servaddr, sizeof(servaddr)) == -1){
printf("bind socket error: %s(errno: %d)
",strerror(errno),errno);
exit(0);
}
//
if( listen(socket_fd, 10) == -1){
printf("listen socket error: %s(errno: %d)
",strerror(errno),errno);
exit(0);
}
printf("==========waiting for client's request==========
");
while(1){
// , CPU 。sizeof(struct sockaddr)
socklen_t addrsize = sizeof(struct sockaddr);
if((connect_fd = accept(socket_fd, (struct sockaddr*)&remotaddr, &addrsize)) == -1){
if (errno == EINTR)
continue;
else
printf("accept socket error: %s(errno: %d)
",strerror(errno),errno);
continue;
}
printf("accept from ip: %s
", inet_ntoa(remotaddr.sin_addr));
//
n = recv(connect_fd, buff, MAXLINE, 0);
buff[n] = '\0';
//
if(!fork()){ /* */
if(send(connect_fd, buff, sizeof(buff),0) == -1)
perror("send error
");
close(connect_fd);
exit(0);
}
printf("recv msg from client: %s
", buff);
close(connect_fd);
}
close(socket_fd);
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.