TCP에코 클라이언트에 이어 TCP에코 서버를 구현해 보았습니다
TCPEchoServer.c
practical.h 헤더파일 처리하기
실행
./TCPEchoClient4 127.0.0.접속성공 2000
./TCPEchoServer 2000
결과
TCPEchoServer.c
#include <stdio.h> |
DieWithUserMessage.c
파일(오작동시 에러메세지를 출력!!)
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <string.h>
#define BUFSIZE 30
void DieWithUserMessage(const char *msg, const char *detail)
{
fputs(msg,stderr);
fputs(":",stderr);
fputs(detail, stderr);
fputc('\n',stderr);
exit(1);
}
void DieWithSystemMessage(const char *msg)
{
perror(msg);
exit(1);
}
void HandleTCPClient(int clntSocket)
{
char buffer[BUFSIZE];
ssize_t numBytesRcvd = recv(clntSocket, buffer, BUFSIZE, 0);
if (numBytesRcvd < 0)
DieWithSystemMessage("recv() failed");
while(numBytesRcvd > 0)
{
ssize_t numBytesSent = send(clntSocket, buffer, numBytesRcvd,0);
if(numBytesSent < 0)
DieWithSystemMessage("send() failed");
else if(numBytesSent != numBytesRcvd)
DieWithUserMessage("send()","sent unexpected number of bytes");
numBytesRcvd = recv(clntSocket, buffer, BUFSIZE,0);
if(numBytesRcvd <0)
DieWithSystemMessage("recv() failed");
}
close(clntSocket);
}
#include <stdlib.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <string.h>
#define BUFSIZE 30
void DieWithUserMessage(const char *msg, const char *detail)
{
fputs(msg,stderr);
fputs(":",stderr);
fputs(detail, stderr);
fputc('\n',stderr);
exit(1);
}
void DieWithSystemMessage(const char *msg)
{
perror(msg);
exit(1);
}
void HandleTCPClient(int clntSocket)
{
char buffer[BUFSIZE];
ssize_t numBytesRcvd = recv(clntSocket, buffer, BUFSIZE, 0);
if (numBytesRcvd < 0)
DieWithSystemMessage("recv() failed");
while(numBytesRcvd > 0)
{
ssize_t numBytesSent = send(clntSocket, buffer, numBytesRcvd,0);
if(numBytesSent < 0)
DieWithSystemMessage("send() failed");
else if(numBytesSent != numBytesRcvd)
DieWithUserMessage("send()","sent unexpected number of bytes");
numBytesRcvd = recv(clntSocket, buffer, BUFSIZE,0);
if(numBytesRcvd <0)
DieWithSystemMessage("recv() failed");
}
close(clntSocket);
}
practical.h 헤더파일 처리하기
void DieWithUserMessage(const char *msg, const char *detail);
void DieWithSystemMessage(const char *msg);
void HandleTCPClient(int clntSocket);
void DieWithSystemMessage(const char *msg);
void HandleTCPClient(int clntSocket);
컴파일(gcc) 순서
1)gcc –o TCPEchoClient4 TCPEchoClient4.c
2)gcc –c DieWithMessage DieWithMessage.c
3)gcc –o TCPEchoClient4 TCPEchoClient4.c DieWithMessage.o
실행
./TCPEchoClient4 127.0.0.접속성공 2000
./TCPEchoServer 2000
결과
'Network > 초급 TCP/IP socket' 카테고리의 다른 글
09. UDP에 connect() 사용 (0) | 2011.07.12 |
---|---|
08. TCP / UDP 데이터 전송 경계 확인 (0) | 2011.07.11 |
06. TCP 에코 클라이언트 소켓 (TCP ECHO CLIENT SOCKET) (0) | 2011.07.07 |
05. UDP통신흐름 (0) | 2011.07.05 |
04. Server / Client TCP통신흐름 리눅스 프로그래밍 (0) | 2011.07.04 |