티스토리 뷰

반응형
직접 실행해서 아이피와 포트를 적게 바꿧습니다..

서버 소스
-------------------------------------------------------------------
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <winsock2.h>

void ErrorHandling(char *message);

int main(void)
{
 WSADATA wsaData;
 SOCKET hServSock;  
 SOCKET hClntSock;  
 SOCKADDR_IN servAddr; 
 SOCKADDR_IN clntAddr;  
 int szClntAddr;
 int port;
 char message[]="Hello World!\n";

 printf("Port 입력: ");
 scanf("%d", &port);

 if(port<1023){
  printf("Usage : 1024이상의 Port를 입력해주십시오.\n");
  exit(1);
 }
 
 if(WSAStartup(MAKEWORD(2, 2), &wsaData) != 0) /* Load Winsock 2.2 DLL */
  ErrorHandling("WSAStartup() error!");
 
 hServSock=socket(PF_INET, SOCK_STREAM, 0); /* 서버 소켓 생성 */
 if(hServSock==INVALID_SOCKET)
  ErrorHandling("socket() error");
 
 memset(&servAddr, 0, sizeof(servAddr));
 servAddr.sin_family=AF_INET;
 servAddr.sin_addr.s_addr=htonl(INADDR_ANY);
 servAddr.sin_port=htons(port);
 
 if( bind(hServSock, (SOCKADDR*) &servAddr, sizeof(servAddr))==SOCKET_ERROR ) /* 소켓에 주소 할당 */
  ErrorHandling("bind() error"); 
 
 if( listen(hServSock, 5)==SOCKET_ERROR) /* 연결 요청 대기 상태 */
  ErrorHandling("listen() error");

 szClntAddr=sizeof(clntAddr);     
 hClntSock=accept(hServSock, (SOCKADDR*)&clntAddr,&szClntAddr); /* 연결 요청 수락 */
 if(hClntSock==INVALID_SOCKET)
  ErrorHandling("accept() error"); 
 
 send(hClntSock, message, sizeof(message), 0); /* 데이터 전송 */

 closesocket(hClntSock);  /* 연결 종료 */
 WSACleanup();
 return 0;
}

void ErrorHandling(char *message)
{
 fputs(message, stderr);
 fputc('\n', stderr);
 exit(1);
}
-------------------------------------------------------------------
클라이언트 소스.
-------------------------------------------------------------------
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <winsock2.h>

void ErrorHandling(char *message);

int main(void)
{
 WSADATA wsaData;
 SOCKET hSocket;
 char message[30];
 int strLen;
 char ip[128];
 int port;
 SOCKADDR_IN servAddr;

 printf("IP 입력: ");
 scanf("%s", ip);
 printf("Port 입력: ");
 scanf("%d", &port);

 if(port<1023){
  printf("Usage : 1024이상의 Port를 입력해주십시오.\n");
  exit(1);
 }

 if(WSAStartup(MAKEWORD(2, 2), &wsaData) != 0) /* Load WinhSocket 2.2 DLL */
  ErrorHandling("WSAStartup() error!");
 
 hSocket=socket(PF_INET, SOCK_STREAM, 0); /* 서버 접속을 위한 소켓 생성 */
 if(hSocket==INVALID_SOCKET)
  ErrorHandling("hSocketet() error");
 
 memset(&servAddr, 0, sizeof(servAddr));
 servAddr.sin_family=AF_INET;
 servAddr.sin_addr.s_addr=inet_addr(ip);
 servAddr.sin_port=htons(port);
 
 if( connect(hSocket, (SOCKADDR*)&servAddr, sizeof(servAddr))==SOCKET_ERROR ) /* 서버로 연결 요청 */
  ErrorHandling("connect() error!");
 
 strLen=recv(hSocket, message, sizeof(message)-1, 0); /* 데이터 수신 */
 if(strLen==-1)
  ErrorHandling("read() error!");
 message[strLen]=0;
 printf("Message from server : %s \n", message); 

 closesocket(hSocket); /* 연결 종료 */
 WSACleanup();
 printf("계속하려면 아무 키나 누르십시오. . . \n");
 getch();
 return 0;
}

void ErrorHandling(char *message)
{
 fputs(message, stderr);
 fputc('\n', stderr);
 printf("계속하려면 아무 키나 누르십시오. . . \n");
 getch();
 exit(1);
}
-------------------------------------------------------------------

반응형

'Programing' 카테고리의 다른 글

OpenCV - Surf 물체인식..  (3) 2009.11.08
넥슨입사문제라고 떠도는것.  (0) 2009.01.19
Warning C4996 잡기  (0) 2009.01.19
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/03   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31
글 보관함