Study/TIL(Today I Learned)

24.04.13 서버 개발기, C++

에린_1 2024. 4. 14. 18:30
728x90

서버 개발기

받아오는 데이터의 문제

현재 유니티 클라이언트와 c++ 서버의 연결은 성공했다.

데이터 send와 receive도 구현을 했는데, recv한 데이터를 print했을 때, 뒤에 이상한 값들이 같이 나오는 문제가 있다.

 

흑흑.. 슬프다 슬퍼 어제는 받아오지도 못했으니 그래도 전진한것을 긍정적으로 생각해봐야겠다.

돌밍님 찬양, 경배해

https://stonebig.tistory.com/

 

공부하는 돌맹이

 

stonebig.tistory.com

쓰레기 값이 들어오는 문제였다. 그래서 들어온 버퍼 사이즈만큼 받아오게 코드를 짰다.

처음에는 for문을 통해서 들어온 사이즈만큼 반복시켜줬다.

for(int i =0; i<recv_size;++i)

이렇게 짰을 경우 사실 불필요하게 많은 반복문이 돌아가기 때문에 돌밍님께서 개행문자를 넣는것을 알려주셨다. 그래서 코드를 수정했다.

buf[recv_size] = '\\0';
cout << "Recv Data : " << buf << endl;

잘 동작을 하는데 중간에 인터럽트가 발생했다.

이유를 어떻게 찾아야지 하며 고민하다가 VS의 호출스택을 찾아봤는데, recv_size가 -1일때 배열에 접근해서 문제가 생겼었다. 그래서 예외처리를 해줬다.

if(recv_size > 0)
	buf[recv_size] = '\\0';
cout << "Recv Data : " << buf << endl;
cout << "Recv Len : " << recv_size << endl;

잘 작동하지만 while문임에도 계속 서버와 클라이언트간의 연결이 끊어져서 왜일까 하다가 유니티의 클라이언트쪽 코드를 보고 문제점을 찾았다.

 //stream.Close();
 //conn_sock.Close();

연결을 끊고 있는데 내가 왜 끊어지나 하고 있었다. 이 .. 멍충이!

당장 주석처리 해놓고 결과를 확인했더니 연결이 끊기지않고 잘 동작했다.

C++

char* 형식의 인수가 LPCWSTR 형식의 매개 변수와 호환되지 않습니다.

char* 형식의 인수가 LPCWSTR 형식의 매개 변수와 호환되지 않습니다.

서버를 만드는 중 이러한 오류가 떴다.

프로젝트 생성시 유니코드 문자 집합으로 생성했기에 생긴 문제이다.

프로젝트 설정에서 문자집합의 설정을 바꾸거나 T매크로를 사용하면 해결 가능하다.

 

참조

https://m.blog.naver.com/chrhdhkd/220443281556

 

const char * 형식의 인수가 LPCWSTR 형식의 매개 변수와 호환되지 않습니다.

작업중 const char * 형식의 인수가 LPCWSTR형식의 매개변수와 호환되지 않습니다라는 오류가 뜰때 ...

blog.naver.com

#Pragma pack

  • 네트워크 통신을 할때 패킷의 사이즈를 정확하게 지정하고 통신할 수 있게 하는것
  • 네트워크 헤더 구조체의 경우 필수적으로 사용한다.
  • 구조체의 크기가 커지는 것을 막을 수 있다.
#pragma pack(push, n)
#pragma pack(pop)
  • 전처리기 이며, n은 정렬크기를 넣어주면 된다.
  • n의 값은 1,2, 4, 8, 16만 유효하며, 디폴트 값은 기본 타입중 가장 큰 타입인 8이다.
#pragma pack(push, 1)
  • 위의 경우 1byte씩 정렬한다고 선언한 것이다.
#pragma pack(pop)
  • 특정 구조체에 대해서만 구조체의 정렬 크기를 지정해주고자 한다면 #pragma pack(pop)을 사용한다
728x90

'Study > TIL(Today I Learned)' 카테고리의 다른 글

24.04.15 서버 개발기  (0) 2024.04.16
24.04.14 서버 개발기  (0) 2024.04.15
24.04.12 서버 프로그래밍, 백준  (0) 2024.04.14
24.04.11 서버 프로그래밍  (0) 2024.04.12
24.04.10 서버 프로그래밍  (0) 2024.04.10