"젠장 또 이러네. 렉때문에 죽었어..."
게임은 유선랜으로 하라는 말이 있다. 무선랜으로 하면 묘한 렉 현상이 있기 때문이다.
윈도우즈에서 무선랜 사용시 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분마다 저렇게 핑이 튀는게 거슬렸던 사람들은 위 코드로 한번 진행 해보길 바란다. 난 이걸로 해결봤다 ~
프로그래밍을 모르신다구요? 그럼 쉽게 쓰세요.
와이파이 전파 혼선으로 인한 끊김 현상은 아래 솔루션으로 해결 보길 바란다.
와이파이 끊김이 심하다면
최근 블로그 유입 통계를 보니, 공유기때문에 골치깨나 썩는 사람들이 많은 모양이다. 그래서 오늘은 정보보안이나 프로그래밍이 아닌, 우리 일상에서 가장 골치아픈 문제를 다뤄보자. 짧게 가
nitwit.tistory.com
'상점' 카테고리의 다른 글
FoxyNet - LAN 에서 파일 공유하기 (0) | 2022.02.22 |
---|---|
UDP 플러딩 - 스트레스테스트용 (2) | 2022.02.14 |
스타크래프트 배틀태그뷰어 (닉네임 변경에 대응 가능) (6) | 2021.01.03 |