|
http://www.hackerschool.org/HS_Boards/zboard.php?AllArticle=true&no=6365 [복사]
안녕하세요
TCP/IP로 프로그램 만들다가 잘 안되는 부분이 있어서 질문드립니다.
저는 C언어로 구현하려고 합니다.
제가 한 프로그램이 서버와 클라이언트 역할을 하는 코드를 구현 해야하는데요
코드순서
/*
client 소켓 변수= hSocket
server 소켓 변수= hServSock
들어올 client 소켓 변수= hClntSock 라고 합시다.
*/
socket(hClntSock에 파일디스크립터 할당)-connect(다른 프로그램에게 연결 요청)-socket(hServSock에 파일디스크립터 할당)-bind(주소정보할당)-listen(대기)-accept(클라이언트 연결 요청 수락)
이렇게 구현하면, 양방향으로
다른 프로그램1 -> 지금설명한 프로그램 -> 다른 프로그램2
이렇게 되지 않나요?
책에서는 이렇게 구현된다고 본적이 있는 거 같아서 구현해 보았습니다
아래는 제가 구현한 코드입니다.
그런데 오류가 발생하네요.
---------------------------------------------------------------------------------------
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <WinSock2.h>
#define BUF_SIZE 1024
int main(void)
{
WSADATA wsaData;
SOCKET hSocket, hServSock, hClntSock;
/*
client 소켓 변수= hSocket
server 소켓 변수= hServSock
들어올 client 소켓 변수= hClntSock 라고 합시다.
*/
char message[BUF_SIZE];
int strLen;
SOCKADDR_IN servAdr, servAdrs, clntAdr;
int clntAdrSize;
if(WSAStartup(MAKEWORD(2, 2), &wsaData)!=0)
{
printf("에러 메세지 : 라이브러리 초기화 실패\n\n");
printf("잠시후 다시 실행해주세요^^;;");
Sleep(5000);
exit(1);
}
hSocket=socket(PF_INET, SOCK_STREAM, 0);
if(hSocket==INVALID_SOCKET)
{
printf("에러 메세지 : 소켓 생성 실패\n\n");
printf("잠시후 다시 실행해주세요^^;;");
Sleep(5000);
exit(1);
}
memset(&servAdr, 0, sizeof(servAdr));
servAdr.sin_family=AF_INET;
servAdr.sin_addr.s_addr=inet_addr("127.0.0.1");
servAdr.sin_port=htons(atoi("9190"));
if(connect(hSocket, (SOCKADDR*)&servAdr, sizeof(servAdr))==SOCKET_ERROR)
{
printf("에러 메세지 : 연결 실패\n\n");
printf("잠시후 다시 실행해주세요^^;;");
Sleep(5000);
exit(1);
}
hServSock=socket(PF_INET, SOCK_STREAM, 0);
if(hServSock==INVALID_SOCKET)
{
printf("에러 메세지 : 소켓 생성 실패\n\n");
printf("잠시후 다시 실행해주세요^^;;");
Sleep(5000);
exit(1);
}
memset(&servAdrs, 0, sizeof(servAdrs));
servAdrs.sin_family=AF_INET;
servAdrs.sin_addr.s_addr=htonl(INADDR_ANY);
servAdrs.sin_port=htons(atoi("9190"));
if(bind(hServSock, (SOCKADDR*)&servAdrs, sizeof(servAdrs))==SOCKET_ERROR)
{
printf("에러 메세지 : 주소 정보 할당 실패\n\n");
printf("잠시후 다시 실행해주세요^^;;");
Sleep(5000);
exit(1);
}
if(listen(hServSock, 5)==SOCKET_ERROR)
{
printf("에러 메세지 : 연결 요청 대기 실패\n\n");
printf("잠시후 다시 실행해주세요^^;;");
Sleep(5000);
exit(1);
}
clntAdrSize=sizeof(clntAdr);
hClntSock=accept(hServSock, (SOCKADDR*)&clntAdr, &clntAdrSize);
if(hClntSock==-1)
{
printf("에러 메세지 : 접속 실패\n\n");
printf("잠시후 다시 실행해주세요^^;;");
Sleep(5000);
exit(1);
}
else
{
이 부분은 나중에 제가 프로그램 용도에 맞게 코딩할거예요...ㅎ
}
closesocket(hSocket);
closesocket(hServSock);
closesocket(hClntSock);
WSACleanup();
return 0;
}
---------------------------------------------------------------------------------------
왜 오류가 뜨는거죠ㅠㅠ
도와주세요.
|
Hit : 8839 Date : 2013/07/13 03:37
|