"젠장 또 이러네. 렉때문에 죽었어..."
게임은 유선랜으로 하라는 말이 있다. 무선랜으로 하면 묘한 렉 현상이 있기 때문이다.
윈도우즈에서 무선랜 사용시 1분마다 한번씩 아주 잠깐씩 핑이 튈 때가 있다.
주변 와이파이가 뭐뭐있나 스캔하기 위해서 1번 채널부터 161번채널까지 쭉 돌기 때문이다.
문제는 사용자가 사용중일때도 채널이 수시로 돌아가버린다는 점이다. 병장님 TV 보고계시는데 채널을 멋대로 돌려버리는 꼴이다. 그 찰나의 사이 전파를 수신받지 못하고 결국 데이터가 소실되어 핑이 튀고 게임이 간헐적으로 렉이 걸리게 되는것이다. 그래서 무선 환경에서 게임하지 말라는 이야기가 퍼지게 된 것이다. 이것은 마이크로소프트의 잘못이 크다. 운영체제 자체에서 무선랜을 이런식으로 운용하니말이다...
실시간성이 중요한 게임에서 이런 문제가 생긴다면, 그때가 한타, 교전, 경합상황이였다면 그 억울함은 실로 엄청날 것이다...
저렇게 채널이 돌아가버리는걸 "백그라운드 스캔" 이라고 부른다. 이 기능을 꺼버릴 수 있다면 좋겠으나... 상식적인 방법으로는 꺼지지 않는다. 추가적으로 "미디어 스트리밍모드" 를 켜주어야 제대로 목적을 달성 할 수 있다.
#include <stdio.h>
#include <tchar.h>
/*wlanapi.h 를 include 하기 전에 windows.h 를 include 해주자.
wlanapi.h 에서 일부 매크로 상수를 windows.h 에서 끌어다 사용하기 때문에
이 조치가 없다면 정상적인 함수 선언이 들어가지 않게된다.*/
#include <windows.h>
#include <wlanapi.h>
#pragma comment(lib, "wlanapi.lib")
int main()
{
HANDLE hClient;
DWORD CurVer;
DWORD Err;
PWLAN_INTERFACE_INFO_LIST pInterfaceList = NULL;
CLSID* pGuid;
BOOL OnOff = FALSE;
int i; char buffer[256];
Err = WlanOpenHandle(2, 0, &CurVer, &hClient);
if (Err != ERROR_SUCCESS) {
printf("핸들 오픈 실패요 \n");
return 0;
}
Err = WlanEnumInterfaces(hClient, NULL, &pInterfaceList);
if (Err != ERROR_SUCCESS) {
printf("장비 찾기 실패요 \n");
return 0;
}
printf("현재 연결된 무선 장비 (%d개) 에 대하여 B-Scan 비활성화중\n", pInterfaceList->dwNumberOfItems);
for (i = 0; i < pInterfaceList->dwNumberOfItems; i++) { /*발견된 장비 갯수만큼 루프를 돌거다.*/
wprintf(L"%s\n", pInterfaceList->InterfaceInfo[i].strInterfaceDescription);
pGuid = &pInterfaceList->InterfaceInfo[i].InterfaceGuid;
OnOff = FALSE; /*백그라운드 스캔은 꺼주고 (이건 안 해도 될 것 같긴 하다)*/
Err = WlanSetInterface(hClient, pGuid, wlan_intf_opcode_background_scan_enabled, sizeof(BOOL), &OnOff, NULL);
if (Err) printf(" - [백그라운드 스캔 비활성화 실패]\n");
else printf(" - [백그라운드 스캔 비활성화 성공]\n");
OnOff = TRUE; /* 미디어 스트리밍모드 켜준다*/
Err = WlanSetInterface(hClient, pGuid, wlan_intf_opcode_media_streaming_mode, sizeof(BOOL), &OnOff, NULL);
if (Err) printf(" - [미디어 스트리밍모드 활성화 실패]\n\n");
else printf(" - [미디어 스트리밍모드 활성화 성공]\n\n");
}
if (pInterfaceList) WlanFreeMemory(pInterfaceList);
printf("\n\n안정화 작업 완료\n이 프로그램이 켜진동안은 설정이 유지됩니다.\nEnter 입력시 프로그램 종료");
getchar();
WlanCloseHandle(hClient, NULL); /*이 핸들이 닫히는 순간, 설정이 초기화된다.*/
return 0;
}
|
cs |
위와 같은 방식으로 백그라운드 스캔을 꺼주고 미디어스트리밍 모드를 켜주니 1분마다 돌아가버리던 채널이 돌아가지 않게되고, 핑이 튀는 현상도 없게된다.
다만, 무선채널의 혼잡으로 (2.4ghz에서 심함) 발생하는 데이터 손실은 이 매커니즘과는 무관하므로, 1분마다 저렇게 핑이 튀는게 거슬렸던 사람들은 위 코드로 한번 진행 해보길 바란다. 난 이걸로 해결봤다 ~
프로그래밍을 모르신다구요? 그럼 쉽게 쓰세요.
와이파이 전파 혼선으로 인한 끊김 현상은 아래 솔루션으로 해결 보길 바란다.
'상점' 카테고리의 다른 글
FoxyNet - LAN 에서 파일 공유하기 (0) | 2022.02.22 |
---|---|
UDP 플러딩 - 스트레스테스트용 (2) | 2022.02.14 |
스타크래프트 배틀태그뷰어 (닉네임 변경에 대응 가능) (6) | 2021.01.03 |