링크 ux 네트워크 프로 그래 밍 다 중 프로 세 스 병행 서버
4953 단어 clinux네트워크 프로 그래 밍
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <sys/types.h>
#define PORT 1234
#define MAXSIZE 1024
static int clientProcess(int connfd, struct sockaddr_in clientSock)
{
int num = 0;
int i = 0;
char recvBuf[MAXSIZE];
char sendBuf[MAXSIZE];
char clientName[MAXSIZE];
num = recv(connfd, clientName, MAXSIZE, 0);
if (num < 0)
{
printf("recv clientName message from client!
");
return -1;
}
clientName[strlen(clientName)-1] = '\0';
printf("You got's a connection from %s, client name is %s
",
inet_ntoa(clientSock.sin_addr), clientName);
while (1)
{
num = recv(connfd, recvBuf, MAXSIZE, 0);
if (num == 0)
{
close(connfd);
return -1;
}
recvBuf[strlen(recvBuf)-1] = '\0';
printf("received client (%s) message :%s
", clientName, recvBuf);
//
for (i=0; i<num-1; i++)
{
if ((recvBuf[i]>='a' && recvBuf[i]<='z') || (recvBuf[i]>='A' && recvBuf[i]<='Z'))
{
recvBuf[i] = recvBuf[i] + 3;
if ((recvBuf[i]>'Z' && recvBuf[i]<'Z'+3) || (recvBuf[i]>'z'))
{
recvBuf[i] = recvBuf[i] -26;
}
}
sendBuf[i] = recvBuf[i];
}
sendBuf[num-1] = '\0';
send(connfd, sendBuf, MAXSIZE, 0);
}
close(connfd);
return 1;
}
int main(int argc, char **argv)
{
int listenfd;
int connectfd;
struct sockaddr_in serverSock;
struct sockaddr_in clientSock;
socklen_t len = 0;
pid_t pid;
listenfd = socket(AF_INET, SOCK_STREAM, 0);
if (listenfd < 0)
{
printf("Create socket fails!
");
return -1;
}
int opt = SO_REUSEADDR;
setsockopt(listenfd, SOL_SOCKET, SO_REUSEADDR, &opt, sizeof opt);
bzero(&serverSock, sizeof serverSock);
serverSock.sin_family = AF_INET;
serverSock.sin_port = htons(PORT);
serverSock.sin_addr.s_addr = htonl(INADDR_ANY);
if (bind(listenfd, (struct sockaddr *)&serverSock, sizeof serverSock) < 0)
{
printf("bind fails!
");
return -1;
}
if (listen(listenfd, 5) < 0)
{
printf("listen fails!
");
return -1;
}
len = (socklen_t)(sizeof clientSock);
while (1)
{
connectfd = accept(listenfd, (struct sockaddr *)&clientSock, &len);
if (connectfd < 0)
{
printf("accept fails!
");
return -1;
}
//
if ((pid = fork()) > 0)
{
close(connectfd);
continue;
}
else if (pid == 0)
{
close(listenfd);
clientProcess(connectfd, clientSock);
return 1;
}
else
{
printf("fork() fails!
");
return -1;
}
}
close(listenfd);
}
클 라 이언 트 코드:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <netdb.h>
#define PORT 1234
#define MAXSIZE 1024
static int clientProcess(FILE *fp, int connfd)
{
char readLine[MAXSIZE];
char recvLine[MAXSIZE];
int num;
printf("connect to server success!
");
printf("Input client's name:");
if (fgets(readLine, MAXSIZE, fp) == NULL)
{
printf("fgets fails!
");
return -1;
}
send(connfd, readLine, MAXSIZE, 0);
while (fgets(readLine, MAXSIZE, fp) != NULL)
{
if (strncmp(readLine, "quit", strlen("quit")) == 0)
{
exit(-1);
}
send(connfd, readLine, strlen(readLine), 0);
num = recv(connfd, recvLine, MAXSIZE, 0);
if (num < 0)
{
printf("received fails!
");
return -1;
}
recvLine[num-1] = '\0';
printf("Server message:%s
", recvLine);
}
return 1;
}
int main(int argc, char **argv)
{
int sockfd;
struct sockaddr_in serverSock;
struct hostent *he;
if (argc != 2)
{
printf("Usage: %s <IP Address>
", argv[0]);
return -1;
}
he = gethostbyname(argv[1]);
if (he == NULL)
{
printf("gethostbyname fails!
");
return -1;
}
sockfd = socket(AF_INET, SOCK_STREAM, 0);
if (sockfd < 0)
{
printf("Create socket fails!
");
return -1;
}
bzero(&serverSock, sizeof serverSock);
serverSock.sin_family = AF_INET;
serverSock.sin_port = htons(PORT);
serverSock.sin_addr = *((struct in_addr *)he->h_addr);
if (connect(sockfd, (struct sockaddr *)&serverSock, sizeof serverSock) < 0)
{
printf("connect fails!
");
return -1;
}
clientProcess(stdin, sockfd);
close(sockfd);
return 1;
}
프로그램 이 실현 하 는 기능 은 매우 간단 하고 코드 도 비교적 통속 적 이 고 이해 하기 쉬 우 며 기본적으로 주석 이 없다!코드 는 내 가상 컴퓨터 에서 디 버 깅 을 통 과 했 습 니 다. 컴 파일 하면 실행 할 수 있 습 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Docker를 사용한 React 및 .NET Core 6.0 샘플 프로젝트 - 1부이 기사에서는 Entity Framework Core Code First 접근 방식을 사용하는 ASP.NET Core 6.0 WEP API의 CRUD(만들기, 읽기, 업데이트 및 삭제) 작업에 대해 설명합니다. 웹 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.