윈도우가 유닉스의 영향을 받았기 때문에 똑같이 windows도 socket을 채택했다.
winsock.h를 땡겨온다.
윈도우는 소켓을 사용할려면 반드시 불러야하는 함수가 있다.
if(WSAStartup(MAKEWORD(2,2),&wsaData)!= 0)
{
printf("error\r\n");
return 0;
}
와 끝에 WSACleanup(); 가 반드시 들어가야한다.
int WSAStartup (WORD wVersionRequested, LPWSADATA lpWSAData);
WSAStartup의 함수 원형을 보면 첫 번째 인자는 winsock의 버전을 적어주는 곳이다.
server.c
#include <stdio.h> #include <winsock.h> #pragma comment(lib, "Ws2_32.lib") #define PORT 7777 #define IP "192.168.0.123" #define MAX_PACKETLEN 512 int main() { WSADATA wsaData; //서버용 소켓 SOCKET sSock; //클라이언트용 소켓 SOCKET cSock; //주소를 저장할 구조체 SOCKADDR_IN sAddr; int iLen; int Status; int Writen; char cBuf[MAX_PACKETLEN]; //윈속을 사용하겠다고 전달 if(WSAStartup(MAKEWORD(2,2),&wsaData)!= 0) { printf("error\r\n"); return 0; } //소켓 생성 sSock = socket(AF_INET, SOCK_STREAM, 0); if(sSock == INVALID_SOCKET) { WSACleanup(); return 1; } //구조체를 사용하기 전에 쓰레기 값을 제거해준다. memset(&sAddr,0,sizeof(SOCKADDR_IN)); sAddr.sin_family = AF_INET; sAddr.sin_port = htons(PORT); sAddr.sin_addr.S_un.S_addr = inet_addr(IP); //구조체에 서버의 정보를 넣어준다 Status = bind(sSock,(struct sockaddr *)&sAddr, sizeof(SOCKADDR_IN)); if(Status == SOCKET_ERROR) { printf("Bind Error\n"); closesocket(sSock); WSACleanup(); return 0; } if( SOCKET_ERROR == listen(sSock, 5 )) { printf("listen Error\n"); closesocket(sSock); WSACleanup(); return 0; }
while(1) { //구조체는 Bind시키고 나면 필요없어지기 때문에 재활용 해준다. memset(&sAddr,0,sizeof(SOCKADDR_IN)); iLen = sizeof(SOCKADDR_IN); //클라이언트가 접속하면 클라이언트의 정보가 구조체에 저장된다 cSock = accept(sSock, (struct sockaddr *)&sAddr, &iLen); if(cSock == INVALID_SOCKET) { printf("Accept Error\n"); closesocket(sSock); WSACleanup(); return 1; } printf("Incomming client [%s] [%d]\n", inet_ntoa(sAddr.sin_addr), ntohs(sAddr.sin_port)); iLen = recv(cSock,cBuf, MAX_PACKETLEN,0); if( iLen > 0) { Writen = send(cSock, cBuf, iLen,0); } else { printf("read Error\n"); } closesocket(cSock); if(0 ==strcmp(cBuf,"quit")) { break; } } //소켓을 생성했으니 닫아줍시다. closesocket(sSock); WSACleanup(); return 0; } |
'코스웨어 > 15년 스마트컨트롤러' 카테고리의 다른 글
20151201 엄민웅 - arm 임베디드레시피 (교제 162~199) WinSock 2일차. (3) | 2015.12.01 |
---|---|
20151201 - 권오민 - ARM ASSEMBLY 4일차/WinSock 2일차 (2) | 2015.12.01 |
20151201 - 홍준모(WinSock) - 1일 차 (2) | 2015.12.01 |
2015-11-30 Win32 API Socket 개인업무일지 - 천정호 (5) | 2015.12.01 |
2015.11.30_[Winsock #1]_이량경_소켓통신 (3) | 2015.12.01 |
20151130 - 강동조 개인업무일지 winsock1일차 (5) | 2015.12.01 |
20151130 임현수 업무일지 Winsock #1 소켓통신 (3) | 2015.12.01 |
20151130_안향진_WINSOCK_1 (5) | 2015.11.30 |