(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:


댓글 달기