윈도우 - 60초마다 무선랜 불안정해지는 현상 [무선랜 안정화]
상점

윈도우 - 60초마다 무선랜 불안정해지는 현상 [무선랜 안정화]

 

"젠장 또 이러네. 렉때문에 죽었어..."

 

 

게임은 유선랜으로 하라는 말이 있다. 무선랜으로 하면 묘한 렉 현상이 있기 때문이다.

윈도우즈에서 무선랜 사용시 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(20&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분마다 저렇게 핑이 튀는게 거슬렸던 사람들은 위 코드로 한번 진행 해보길 바란다. 난 이걸로 해결봤다 ~

 

프로그래밍을 모르신다구요? 그럼 쉽게 쓰세요.

무선랜안정화.exe
0.01MB

 

 

와이파이 전파 혼선으로 인한 끊김 현상은 아래 솔루션으로 해결 보길 바란다.

nitwit.tistory.com/19

 

와이파이 끊김이 심하다면

최근 블로그 유입 통계를 보니, 공유기때문에 골치깨나 썩는 사람들이 많은 모양이다. 그래서 오늘은 정보보안이나 프로그래밍이 아닌, 우리 일상에서 가장 골치아픈 문제를 다뤄보자. 짧게 가

nitwit.tistory.com