http://www.hackerschool.org/HS_Boards/zboard.php?id=QNA_programming&no=6503 [º¹»ç]
±ÍÂúÀ¸½Ã´õ¶óµµ µµ¿ÍÁÖ¼¼¿ä ¤Ì¤Ì ¸îÀÏÀÌ °É·È½À´Ï´Ù.
ÇÁ·ÎÁ§Æ® ¼Ó¼º¿¡ [¸µÄ¿]>[ÀÔ·Â]>[Ãß°¡Á¾¼Ó¼º]>ws2_32.lib¸¦ ÇÏ°í ÄÄÆÄÀÏÀ» ÇÏ¿´½À´Ï´Ù.
server ¼Ò½º
#include <winsock2.h>
#include <stdlib.h>
#include <stdio.h>
#include <Windows.h>
#include <process.h>
#include <string.h>
#define BUFSIZE 512
HANDLE hthread; // ¾²·¹µå¸¦ Á¦¾î ÇϱâÀ§ÇÑ ÇÚµé
SOCKET client_sock; // Åë½Å¿ë ¼ÒÄÏ
static unsigned WINAPI re()// ¸Þ¼¼Áö¸¦ º¸³»±â À§ÇÑ ÇÔ¼ö
{
SOCKADDR_IN clientaddr;//Ŭ¶óÀ̾ðÆ®ÁÖ¼Ò
int addrlen;
char buf[BUFSIZE+1];
int retval;
addrlen = sizeof(clientaddr);
SOCKET listen_sock = socket(AF_INET, SOCK_STREAM, 0);
accept(listen_sock,(SOCKADDR *) &clientaddr, &addrlen);
// µ¥ÀÌÅÍ ¹Þ±â
do{
ZeroMemory(buf, sizeof(buf));
retval = recv(client_sock, buf, BUFSIZE, 0);
if(retval == 0)
return 0;
// ¹ÞÀº µ¥ÀÌÅÍ Ãâ·Â
if(retval != -1){
buf[retval] = '\0';
printf("\n[TCP/%s:%d]%d¹Þ¾Ñ½À´Ï´Ù %s\n[º¸³¾ µ¥ÀÌÅÍ]",inet_ntoa(clientaddr.sin_addr),ntohs(clientaddr.sin_port),retval, buf);
}
}while(1);
}
int main(int argc, char* argv[])
{
int retval;
// À©¼Ó ÃʱâÈ
WSADATA wsa;
if(WSAStartup(MAKEWORD(2,2), &wsa) != 0)
return -1;
// socket(tcp/ip¸¦ ÀÌ¿ë(afÁÖ¼Òü°è),tcp¹æ½ÄÀÇ ½ºÆ®¸², ƯÁ¤ÇÁ·ÎÅäÄݼ³Á¤Àμö ´ëºÎºÐ0ÀÌ´Ù)
SOCKET listen_sock = socket(AF_INET, SOCK_STREAM, 0);// ¼ÒÄϸ¸µé±â
// bind() bind¶õ ¼¹öÀÇ ¾ÆÀÌÇÇ,Æ÷Æ® ¸¦ ºÎ¿©Çϴ°Í
SOCKADDR_IN serveraddr;
ZeroMemory(&serveraddr, sizeof(serveraddr));
serveraddr.sin_family = AF_INET;//µµ¸ÅÀÎ
serveraddr.sin_port = htons(9000);
serveraddr.sin_addr.s_addr = htonl(INADDR_ANY); //IPv4¿¡¼´Â INADDR_ANY(¿ÍÀϵåÄ«µå) ÀÌ°í ÀÌ°ÍÀ¸·Î ¾ÆÀÌÇǸ¦ ¹Þ¾Æ¿Â´Ù
bind(listen_sock, (SOCKADDR *)&serveraddr,sizeof(serveraddr));
// ¼ÒÄÏ ÁÖ¼Ò Å©±â
// listen()
listen(listen_sock, SOMAXCONN);//Ŭ¶óÀ̾ðÆ® ´ë±â »óŸ¦ ¸¸µë ,
//µÎ¹ø¤Š ¸Å°³º¯¼ö °¡ ¹é·Î±× ¶ó´Â°ÍÀÌ°í ´ë±â°¡´ÉÇÑ ÃÖ´ë ¿¬°á°¹¼ö(³ÑÀ¸¸é ¿äû°ÅÀý)
// µ¥ÀÌÅÍ Åë½Å¿¡ »ç¿ëÇÒ º¯¼ö
SOCKADDR_IN clientaddr;//Ŭ¶óÀ̾ðÆ®ÁÖ¼Ò
int addrlen;
char buf[BUFSIZE+1];
while(1){
//accept()
addrlen = sizeof(clientaddr);
client_sock = accept(listen_sock,(SOCKADDR *) &clientaddr, &addrlen);//Ŭ¸®¾Æ¾ðÅÍ¿¡ ´ëÇÑ Á¤º¸¸¦ Ŭ¶óÀ̾ðÆ®¼ÒÄÏ¿¡ ³ÊÀ½
//¹Ýȯ°ª : ¿¬°áµÈ¼ÒÄÏ, Ŭ¶óÀ̾ðÆ®ÀÇ ÁÖ¼Ò, ±×°ÍÀÇ ±æÀÌ
printf("\n[TCP ¼¹ö] Ŭ¶óÀ̾ðÆ® Á¢¼Ó: IP ÁÖ¼Ò=%s, Æ÷Æ® ¹øÈ£=%d\n",inet_ntoa(clientaddr.sin_addr),ntohs(clientaddr.sin_port));
unsigned id;
// ¾²·¹µå ¸¸µé°í ¹Þ´Â ÇÔ¼ö¸¦ ¾²·¹µå¿¡¼ ÇÔ¼ö¸¦ È£ÃâÇÑ´Ù
//create ÇÔ¼öµµ ÀÖÁö¸¸ c++/c ¿¡¼´Â µ¿ÀÛÀÌ Àß µÇÁö ¾Ê´Â´Ù.
hthread = (HANDLE)_beginthreadex(NULL,0,(unsigned int (__stdcall*)(void*))re,NULL,0,&id);
if(hthread ==0)
puts("_beginthreadex error");
// Ŭ¶óÀ̾ðÆ®¿Í µ¥ÀÌÅÍ Åë½Å
while(1){
// µ¥ÀÌÅÍ Åë½Å¿¡ »ç¿ëÇÒ º¯¼ö
int len;
// ¼¹ö¿Í µ¥ÀÌÅÍ Åë½Å
// µ¥ÀÌÅÍ ÀÔ·Â
ZeroMemory(buf, sizeof(buf));// buf¸¦ ºñ¿öÁØ´Ù ÃʱâÈ
printf("\n[º¸³¾ µ¥ÀÌÅÍ]");
if(fgets(buf, BUFSIZE+1, stdin) == NULL)
break;
// '\n' ¹®ÀÚ Á¦°Å
len = strlen(buf);
if(buf[len-1] == '\n')
buf[len-1] = '\0';
if(strlen(buf) == 0)
break;
retval = send(client_sock, buf, strlen(buf), 0); //º¸³»´Â ÇÔ¼ö ,¹Ýȯ°ªÀº ¹ÙÀÌÆ® ¼ö
printf("[TCP ¼¹ö] %d¹ÙÀÌÆ®¸¦ º¸³Â½À´Ï´Ù.\n", retval);
}
closesocket(client_sock);
printf("[TCP ¼¹ö] Ŭ¶óÀ̾ðÆ® Á¾·á: IP ÁÖ¼Ò=%s, Æ÷Æ® ¹øÈ£=%d\n",inet_ntoa(clientaddr.sin_addr),ntohs(clientaddr.sin_port));
}
closesocket(listen_sock);
// À©¼Ó Á¾·á
WSACleanup();
return 0;
}
//////////////////////////////////////////////////////////////
client ¼Ò½º
#include <winsock2.h>
#include <stdlib.h>
#include <stdio.h>
#define BUFSIZE 512
int main(int argc, char* argv[])
{
int retval;
int ret;
// À©¼Ó ÃʱâÈ, ¼ÒĹ ÃʱâÈ
WSADATA wsa;
if(WSAStartup(MAKEWORD(2,2), &wsa) != 0)
return -1;
// socket()
SOCKET sock = socket(AF_INET, SOCK_STREAM, 0);// ¼ÒÄϸ¸µé±â
// connect() ¼¹ö·Î ¿¬°á
SOCKADDR_IN serveraddr;
serveraddr.sin_family = AF_INET; // TCP/IP¸¦ »ç¿ë
serveraddr.sin_port = htons(9000);
serveraddr.sin_addr.s_addr = inet_addr("127.0.0.1");//¼¹öÀÇ IP ÁÖ¼Ò
retval = connect(sock, (SOCKADDR *)&serveraddr,sizeof(serveraddr));
SOCKADDR_IN clientaddr;//Ŭ¶óÀ̾ðÆ®ÁÖ¼Ò
int addrlen;
// µ¥ÀÌÅÍ Åë½Å¿¡ »ç¿ëÇÒ º¯¼ö
char buf[BUFSIZE+1];
int len;
// ¼¹ö¿Í µ¥ÀÌÅÍ Åë½Å
while(1){
addrlen = sizeof(clientaddr);
SOCKET n_sok;
// µ¥ÀÌÅÍ ÀÔ·Â
ZeroMemory(buf, sizeof(buf));
printf("\n[º¸³¾ µ¥ÀÌÅÍ]");
if(fgets(buf, BUFSIZE+1, stdin) == NULL)
break;
// '\n' ¹®ÀÚ Á¦°Å
len = strlen(buf);
if(buf[len-1] == '\n')
buf[len-1] = '\0';
if(strlen(buf) == 0)
break;
// µ¥ÀÌÅÍ º¸³»±â
retval = send(n_sok, buf, strlen(buf), 0);
printf("[TCP Ŭ¶óÀ̾ðÆ®] %d¹ÙÀÌÆ®¸¦ º¸³Â½À´Ï´Ù.\n", retval);
// µ¥ÀÌÅÍ ¹Þ±â
ZeroMemory(buf, sizeof(buf));
ret = recv(n_sok, buf, BUFSIZE, 0);
if(ret == 0)
break;
// ¹ÞÀº µ¥ÀÌÅÍ Ãâ·Â
buf[ret] = '\0';
printf("[TCP Ŭ¶óÀ̾ðÆ®] %d¹ÙÀÌÆ®¸¦ ¹Þ¾Ò½À´Ï´Ù.\n", ret);
printf("[¹ÞÀº µ¥ÀÌÅÍ] %s\n", buf);
}
// closesocket()
closesocket(sock);
// À©¼Ó Á¾·á
WSACleanup();
return 0;
}
¼·Î ¹®ÀÚ¿À» ÁÖ°í ¹Þ´Â Åë½Å ÇÁ·Î±×·¥ ÀÔ´Ï´Ù.
µ¥ÀÌÅ͸¦ º¸³¾ ¶§´Â ¼¹öµç Ŭ¶óÀ̾ðÆ®µç ¸ÕÀú °¡´ÉÇÏ°í, Ŭ¶óÀ̾ðÆ®´Â µ¥ÀÌÅ͸¦ º¸³»¾ß ¹Þ±â°¡ °¡´É ÇÕ´Ï´Ù.
¹®Á¦´Â ÇÑ ÄÄÇ»ÅÍ¿¡¼´Â Àß µÇÁö¸¸ ¼·Î ´Ù¸¥ ÄÄÇ»ÅÍ¿¡¼ Ŭ¶óÀ̾ðÆ®¿¡ ÀÖ´Â IPÁÖ¼Ò¸¦ ¼¹ö ÄÄÇ»ÅÍ¿¡ ¸Â°Ô º¯°æ ÈÄ ¼¹ö¿Í Ŭ¶óÀ̾ðÆ®¸¦ °¢°¢ ½ÇÇà ½ÃÅ°¸é µ¿ÀÛÇÏÁö ¾Ê½À´Ï´Ù.
¹«¾ùÀ̹®Á¦Àϱî¿ä µµ¿ÍÁÖ¼¼¿ä |
Hit : 7193 Date : 2015/01/14 05:25
|