(C++) 소켓하고 클라이언트에서 정수를 송수신하려면 어떻게 해야할까요
글쓴이: aybabtu0974 / 작성시간: 일, 2018/11/25 - 11:56오전
아래처럼 구성을 했습니다.
서버단에는
printf("%d", clientCount); sprintf(Buffer, "%d", clientCount); send(*(SOCKET*)ns, Buffer, MAX_BUFFER, 0);// send(2)
클라이언트 단에는
recv(listenSocket, messageBuffer, MAX_BUFFER, 0);// recv(2) clientCount = atoi(messageBuffer);
이렇게 처리를 했습니다. 그런데 입력 받는 상황에서는 clientCount가 계속 0으로 찍힙니다.
그래서 printf("%d", clientCount)로 확인해봤는데 서버단에서는 클라이언트가 하나씩 들어올때마다 카운트가 1씩 늘어나는 반면 클라이언트 단에서는 그 clientCount 값이 제대로 안 들어오는지 0으로만 들어옵니다..
혹시 무엇이 문제일까요 ㅠㅠㅠ
서버 코드
char welcome[100] = { 0 }; char Buffer[MAX_BUFFER] = { 0 }; int ret = 0, i = 0; int j = 0; double num1 = 0, num2 = 0; double result = 0; j = clientCount; WaitForSingleObject(hMutex, INFINITE); clientCount++; client_num++; ReleaseMutex(hMutex); // 5-1. 데이터 읽기 printf("(슬롯 %d개 남음)\n", Max_socket - client_num); // 갯수로 판단 strcat(welcome, welcome_ok); ret = send(*(SOCKET*)ns, welcome, MAX_BUFFER, 0); send(*(SOCKET*)ns, Buffer, MAX_BUFFER, 0);// send(1) memset(&Buffer, 0, sizeof(Buffer)); printf("%d", clientCount); sprintf(Buffer, "%d", clientCount); send(*(SOCKET*)ns, Buffer, MAX_BUFFER, 0);// send(2) memset(&Buffer, 0, sizeof(Buffer)); recv(*(SOCKET*)ns, Buffer, MAX_BUFFER, 0);// recv(3) strcpy(IDlist[j], Buffer); printf("\n새로 접속한 클라이언트의 ID는 %s 입니다.\n", IDlist[j]); memset(&Buffer, 0, sizeof(Buffer));
클라이언트 코드
char messageBuffer[MAX_BUFFER] = { 0 }; int clientCount=0; if (WSAStartup(MAKEWORD(2, 2), &WSAData) != 0) { printf("Error - Can not load 'winsock.dll' file\n"); return -1; } // 1. 소켓생성 SOCKADDR_IN serverAddr; listenSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); if (listenSocket == INVALID_SOCKET) { printf("Error - Invalid socket\n"); closesocket(listenSocket); WSACleanup(); return -1; } // 서버정보 객체설정 serverAddr.sin_family = AF_INET; serverAddr.sin_addr.s_addr = inet_addr(SERVER_IP); serverAddr.sin_port = htons(SERVER_PORT); // 2. 연결요청 if (connect(listenSocket, (struct sockaddr *)&serverAddr, sizeof(serverAddr)) == SOCKET_ERROR) { printf("Error - Fail to connect\n"); // 4. 소켓종료 closesocket(listenSocket); // Winsock End WSACleanup(); return -1; } printf("connect success\n\n"); recv(listenSocket, messageBuffer, MAX_BUFFER, 0);// recv(1) printf("%s", messageBuffer); memset(&messageBuffer, 0, sizeof(messageBuffer)); recv(listenSocket, messageBuffer, MAX_BUFFER, 0);// recv(2) clientCount = atoi(messageBuffer);
Forums:
댓글 달기