http://www.hackerschool.org/HS_Boards/zboard.php?id=QNA_programming&no=957 [º¹»ç]
¸®´ª½º¿¡¼ sip¸¦ ÀÌ¿ëÇÑ Ã¤Æà ÇÁ·Î±×·¥À» ¸¸µé·Á°í Çϴµ¥¿ä...
sip´Â Á¢¾îµÎ°í ¸ÕÀú °£´ÜÇÑ ¿¡ÄÚ ÇÁ·Î±×·¥À» ¸¸µé¾îº¸·Á°í Çϴµ¥...
±×°Ô Àß ¾È µÇ³×¿ä...
¼¹öÆÄÀÏÀ» ÄÄÆÄÀÏÇÏ°í ½ÇÇà ½ÃÅ°¸é ¼¹ö´Â °¡¸¸È÷ ±â´Ù·Á¾ß Çϴµ¥...
Ŭ¶óÀ̾ðÆ®ÇÑÅ× ¸Þ¼¼Áö¸¦ ¹ÞÀº°Íó·³ ¹®ÀÚ(Ŭ¶óÀ̾ðÆ® ip°¡ Ãâ·ÂµÇ°Ô ÇسùÀ½)¸¦ Ãâ·ÂÇÏ°í Á¾·áµË´Ï´Ù.
Çб³ ¼¹ö¿¡¼¶û Á¦ ÄÄÇ»ÅÍ¿¡ vmware ±ò¾Æ¼ Çغôµ¥ µÑ´Ù ±×·¯³×¿ä...
¼Ò½º ¿Ã·Á³õÀ» Å×´Ï °í¼ö´Ôµé Ä£ÀýÇÑ ´äº¯ ºÎŹµå¸³´Ï´Ù.
///////////////////////////////////////////////////////
¼¹ö¼Ò½º
#include <stdio.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#define MAXPENDING 5
#define RCVBUFSIZE 32
void DieWithError(char * errorMessage);
void HandleTCPClient(int clntSocket);
int main(int argc, char * argv[])
{
int servSock;
int clntSock;
struct sockaddr_in echoServAddr;
struct sockaddr_in echoClntAddr;
unsigned short echoServPort;
unsigned int clntLen;
if (argc != 2)
{
fprintf(stderr, "Usage: %s <Server Port>/n", argv[0]);
exit(1);
}
echoServPort = atoi(argv[1]);
if ((servSock = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP)) < 0)
DieWithError("socket() failed");
memset(&echoServAddr, 0, sizeof(echoServAddr));
echoServAddr.sin_family = AF_INET;
echoServAddr.sin_addr.s_addr = htons(INADDR_ANY);
echoServAddr.sin_port = htons(echoServPort);
if (bind(servSock, (struct sockaddr *) &echoServAddr, sizeof(echoServAddr)) <0)
if(listen(servSock, MAXPENDING) < 0)
DieWithError("listen() failed");
for (;;)
{
clntLen = sizeof(echoClntAddr);
if ((clntSock = accept(servSock, (struct sockaddr *) &echoClntAddr, &clntLen)) <0)
printf("Handing client %s\n", inet_ntoa(echoClntAddr.sin_addr));
HandleTCPClient(clntSock);
}
}
void DieWithError(char * errorMessage)
{
perror(errorMessage);
exit(1);
}
void HandleTCPClient(int clntSocket)
{
char echoBuffer[RCVBUFSIZE];
int recvMsgSize;
if ((recvMsgSize = recv(clntSocket, echoBuffer, RCVBUFSIZE, 0)) < 0)
DieWithError("recv() failed");
while (recvMsgSize > 0)
{
if (send(clntSocket, echoBuffer, recvMsgSize, 0) != recvMsgSize)
DieWithError("send() failed");
if ((recvMsgSize = recv(clntSocket, echoBuffer, RCVBUFSIZE, 0)) < 0)
DieWithError("recv() failed");
}
close(clntSocket);
}
///////////////////////////////////////////////////////
Ŭ¶óÀ̾ðÆ® ¼Ò½º
#include <stdio.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#define RCVBUFSIZE 32
void DieWithError(char * errorMessage);
int main(int argc, char * argv[])
{
int sock;
struct sockaddr_in echoServAddr;
unsigned short echoServPort;
char * servIP;
char * echoString;
char echoBuffer[RCVBUFSIZE];
unsigned int echoStringLen;
int bytesRcvd, totalBytesRcvd;
if((argc<3) || (argc>4))
{
fprintf(stderr, "Usage: %s <Server IP> <Echo Word> [<Echo Port>]\n", argv[0]);
exit(1);
}
servIP = argv[1];
echoString = argv[2];
if(argc==4) echoServPort = atoi(argv[3]);
else echoServPort = 7;
if((sock=socket(PF_INET, SOCK_STREAM, IPPROTO_TCP)) < 0)
DieWithError("socket() failed");
memset(&echoServAddr, 0, sizeof(echoServAddr));
echoServAddr.sin_family = AF_INET;
echoServAddr.sin_addr.s_addr = inet_addr(servIP);
echoServAddr.sin_port = htons(echoServPort);
if(connect(sock, (struct sockaddr *) &echoServAddr, sizeof(echoServAddr)) < 0)
DieWithError("connect() failed");
echoStringLen = strlen(echoString);
if(send(sock, echoString, echoStringLen, 0) != echoStringLen)
DieWithError("send() sent a different number of bytes than expected");
totalBytesRcvd = 0;
printf("Received: ");
while (totalBytesRcvd < echoStringLen)
{
if((bytesRcvd = recv(sock, echoBuffer, RCVBUFSIZE -1, 0)) <= 0)
DieWithError("recv() failed or connection closed prematurely");
totalBytesRcvd += bytesRcvd;
echoBuffer[bytesRcvd] = '\0';
printf(echoBuffer);
}
printf("\n");
close(sock);
exit(0);
}
void DieWithError(char * errorMessage)
{
perror(errorMessage);
exit(1);
}
|
Hit : 4092 Date : 2005/12/03 11:39
|