728x90
반응형
오전시간 찾아본 PDF파일.
오후시간 조인씨 보면서 수업.
http://www.joinc.co.kr/modules/moniwiki/wiki.php/Site/win_network_prog/doc/winsock_basic
소켓이 유닉스 기반이라 별 차이 없지만 윈도우에서 짤때 조금 다른 점은
시작할 때 WSAStartup
끝낼 때 WSACleanup
함수 호출 해줘야 한다는 점.
비주얼C에서 짜면 라이브러리 자동설정 되기도 하지만 도스에서 짤때는
#pragma comment(lib, "Wsock32.lib") 넣어줘야 함.
나머지는 소켓 네트워크 프로그램 짤때 쓰는 함수랑 쓰는게 거의 비슷.
아 그리고 read write 대신에 recv send 함수 사용함.
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 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 | #include <winsock.h> //#include <winsock2.h> #include<stdio.h> #define PORT 7777 #define IP "192.168.0.30" #define MAX_PACKETLEN 512 #pragma comment(lib, "Wsock32.lib") //#pragma comment(lib, "Ws2_32.lib") int main() { WSADATA wsaData; SOCKET sSock; SOCKET cSock; SOCKADDR_IN sAddr; int iRet; int iLen; int Writen; char ReadBuffer[MAX_PACKETLEN]; if(0 != WSAStartup( MAKEWORD(2, 2), &wsaData )) { //int WSAStartup( WORD wVersionRequested, WSADATA* lpWSAData) printf("error\r\n"); return 0; } sSock = socket(AF_INET, SOCK_STREAM, 0); if(sSock == INVALID_SOCKET) { 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); iRet = bind( sSock, (SOCKADDR_IN*)&sAddr, sizeof( SOCKADDR_IN ) ); //바인드 시키고난 다음엔 구조체느 필요 없음여 if( iRet == SOCKET_ERROR) { printf("Bind Error\n"); return 0; } if( SOCKET_ERROR == listen( sSock, 5 )) { printf("listen Error\n"); return 0; } while(1) { memset( &sAddr, 0, sizeof(SOCKADDR_IN)); iLen = sizeof(SOCKADDR_IN); cSock = accept( sSock, (SOCKADDR_IN*)&sAddr, &iLen ); if(cSock == INVALID_SOCKET) { printf("Accept Error\n"); closesocket(sSock); WSACleanup(); return 1; } printf("incoming Client [%s]:[%d]\n", inet_ntoa(sAddr.sin_addr), ntohs(sAddr.sin_port)); iLen = recv( cSock, ReadBuffer, MAX_PACKETLEN,0 ); if( iLen > 0 ) { Writen = send( cSock, ReadBuffer, iLen, 0 ); } else { printf("recv Error\n"); } closesocket(cSock); if(0 == strcmp(ReadBuffer, "quit") ) { break; } } closesocket( sSock ); WSACleanup(); return 0; } |
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 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 | #include <winsock.h> //#include <winsock2.h> #include<stdio.h> #define PORT 7777 //#define IP "192.168.0.30" #define MAXLEN 1024 #pragma comment(lib, "Wsock32.lib") //#pragma comment(lib, "Ws2_32.lib") int main(int argc, char **argv) { WSADATA wsaData; SOCKET cSock; SOCKADDR_IN sAddr; int iRet; int iLen; char cBuf[MAXLEN]; char cRecvBuf[MAXLEN]; if(argc !=2) { printf("Usage : %s [ip address]\n", argv[0]); return 1; } if(0 != WSAStartup( MAKEWORD(2, 2), &wsaData )) { //int WSAStartup( WORD wVersionRequested, WSADATA* lpWSAData) printf("error\r\n"); return 0; } cSock = socket(AF_INET, SOCK_STREAM, 0); if(cSock == INVALID_SOCKET) { 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(argv[1]); if(connect(cSock, (SOCKADDR_IN*)&sAddr, sizeof(SOCKADDR_IN)) == SOCKET_ERROR) { printf("connect Error\n"); return 1; } while(1) { printf("> "); fgets(cBuf, MAXLEN-1, stdin); if(strncmp(cBuf, "quit\n",5) == 0) { break; } send(cSock, (void *)cBuf, strlen(cBuf), 0); memset( cRecvBuf, 0, MAXLEN); recv(cSock, (void *)cBuf, MAXLEN, 0); printf("s -> %s\n", cBuf); } closesocket( cSock ); WSACleanup(); return 0; } |
728x90
'코스웨어 > 15년 스마트컨트롤러' 카테고리의 다른 글
20151130 임현수 업무일지 Winsock #1 소켓통신 (3) | 2015.12.01 |
---|---|
20151130_안향진_WINSOCK_1 (5) | 2015.11.30 |
20151130 윤재희 WinAPI #11. winsock을 사용한 서버/클라이언트 프로그램 (5) | 2015.11.30 |
20151130 - 권오민 - ARM ASSEMBLY 3일차/WinSock 1일차 (5) | 2015.11.30 |
20151130 업무일지 -여지윤- winsock (5) | 2015.11.30 |
20151130-김재홍-윈도우소켓 (5) | 2015.11.30 |
20151130 수업 / winsock_1 - 남수진 (5) | 2015.11.30 |
20151128_김태현_ARM 어셈블리2일차 (7) | 2015.11.30 |