책 : TCP/IP 윈도우 소켓 프로그래밍 간단하게 WINAPI를 활용하여 GUI 환경에서 TCP 소켓 프로그래밍에 대한 코드를 작성하였습니다. 물론 예제에 있는 코드입니다. 작동형식은 아래의 사진과 같이 작동하고, 각 서버와 클라이언트 프로젝트 파일에서 리소스 Dialog를 생성하여야 합니다. 추가 -> 새항목 -> 리소스 -> 리소스 파일 ->Dialog 선택 하시면 생성하실 수 있습니다. 클라코드 더보기 //Client #pragma warning(disable:4996) #pragma comment(lib, "ws2_32.lib") #include #include #include #include "resource.h" #define SERVERIP "127.0.0.1" #define SERVERP..
5장 연습문제 //Client #pragma warning(disable:4996) #pragma comment(lib, "ws2_32.lib") #include #include #include #define MAXLINE 512 #define PORTNUM 5000 int main() { ..... while (1) { .... addrlen = sizeof(peeraddr); int result; retVal = recvfrom(sockfd, (char*)&result, sizeof(int), 0, (SOCKADDR*)&peeraddr, &addrlen); if (retVal == SOCKET_ERROR) { err_quit("Recvfrom"); break; } if (memcmp(&peeraddr..
책) TCP/IP 윈도우 소켓 프로그래밍 간단하게 멀티쓰레드로 send, recv만 해보았습니다. Create Thread API 정리 HANDLE CreateThread( LPSECURITY_ATTRIBUTES lpThreadAttributes, // Security Descriptor 보안설정 옵션, default = null; SIZE_T dwStackSize, // initial stack size 생성시 요구되는 스택 공간 크기 default = 0; LPTHREAD_START_ROUTINE lpStartAddress, // thread function 쓰레드가 실행할 함수의 포인터 (원형이 있음) LPVOID lpParameter, // thread argument 함수의 인자 DWORD dw..
책) TCP/IP 윈도우 소켓 프로그래밍 5장 TCP 서버 - 클라이언트 모델에서 데이터를 전송하는 방식은 다양한 방식이 있다. 1. 고정 길이 데이터 전송 2. 가변 길이 데이터 전송 3. 고정 + 가변 길이 데이터 전송 4. 송신자 데이터 전송후 접속 종료, 수신자는 recv()함수의 리턴값이 0이 될때까지 읽는다. 클라이언트 측에서 먼저 길이를 send 후 데이터를 전송하고, 서버측은 길이를 recv로 받은 후 받은 길이 만큼 recv한다. //DummyClient #pragma warning(disable:4996) #pragma comment(lib, "ws2_32.lib") #include #include #include #define MAXLINE 50 #define PORTNUM 5000 ..
책) TCP/IP 윈도우 소켓 프로그래밍 5장 TCP 서버 - 클라이언트 모델에서 데이터를 전송하는 방식은 다양한 방식이 있다. 1. 고정 길이 데이터 전송 2. 가변 길이 데이터 전송 3. 고정 + 가변 길이 데이터 전송 4. 송신자 데이터 전송후 접속 종료, 수신자는 recv()함수의 리턴값이 0이 될때까지 읽는다. While(1){ 소켓 수신 버퍼에서 1바이트 데이터를 읽는다. 읽은 데이터가 '\n'이 아니면 응용 프로그램 버퍼에 저장. 읽은 데이터가 '\n'이면 루프 빠져나옴. } 응용 프로그램 버퍼에 데이터를 사용한다. //DummyClient #pragma warning(disable:4996) #pragma comment(lib, "ws2_32.lib") #include #include #i..
책 ) 뇌를 자극하는 TCP/IP 소켓 프로그래밍 멀티 쓰레드 중에서 공유데이터를 Lock 하여 두개의 멀티쓰레드가 동시에 데이터에 접근하는 충돌을 방지하는 것을 구현하였습니다. 세마포어를 통해서 키를 생성하고 키를 획득한 쓰레드가 먼저 데이터에 접근하여 작업 후, 반환하게 되면 다음 쓰레드가 키를 얻어서 작업을 수행한다. #pragma warning(disable:4996) #include #include #include #define MAX_THREAD 2 HANDLE gsem; int count = 0; DWORD WINAPI myThread(void* arg) { int threadNum = *((int*)arg); int tmp; printf("Thread Num : %d\n", threadNu..
책 ) 뇌를 자극하는 TCP/IP 소켓 프로그래밍 TCP 와는 달리 Clinet 측에서는 Connect가 할 필요가 없고, Server쪽에서는 Listen, Accept를 할 필요가 없다. 왜냐하면 UDP는 데이터를 그냥 보내기 때문이다. #DummyClient(UDP) #pragma warning(disable:4996) #include #include #include #pragma comment(lib, "ws2_32.lib") #define PORT3600 #define IP"127.0.0.1" #define MAXLEN256 void HandleError(const char* cause) { int errCode = ::WSAGetLastError(); std::cout
책 ) 뇌를 자극하는 TCP/IP 소켓 프로그래밍 코드는 두가지로 Server 코드와 Client 코드 두개로 나뉘어집니다. 책을 공부하면서 원래는 기본적인 Socket 통신은 알고 있었지만, 구조체를 통해서도 데이터를 전달할 수 있다는 것을 알게 되었습니다. 따라서 소켓 프로그래밍을 할때 어떤 방식으로 구조체 데이터를 넘기는지 확인하시면 될 것 같습니다. // DoummyClient #pragma warning(disable:4996) #include #include #include #pragma comment(lib, "ws2_32.lib") #define PORT3600 #define IP"127.0.0.1" void HandleError(const char* cause) { int errCode ..