최근 레몬펜 쪽지

최근 레몬펜 쪽지



로그인 까지의 패킷... 프로젝트 4Leaf

// 최초 접속
[C>S 8B] 00 00 04 00 01 00 01 00
[S>C 8B] 00 00 04 00 02 00 01 00

// 로그인메시지 요청 [버전체크]
[C>S 14B] 01 00 0A 00 [60 05 0D 40] 00 00 00 00 12 00
[S>C var] 01 00 .short .long 00 00 00 00 00 00 .24B

// 로그인요청
[C>S 38B] -> 01 00 .short .long 01 00 00 00 .1B .str .str
[S>C 16B] 01 00 0c 00 .long 01 00 00 00 .1B 00 00 00 // 오류가 있다면
; - 01 : 예기치 못한 오류, 02 : 서버 작업 처리도중 오류
03 : 이전 작업 처리중 오류, 04 : 버전이 맞지 않음, 05 : 작업이 진행중
06 : 작업이 거부됨, 07 : 작업이 취소됨, 08 : 서버 과부하, 0A : 잘못된 사용자
0B : 잘못된 그룹, 0C : 잘못된 ID, 0D : 잘못된 데이터
0E : ID또는 패스워드가 잘못됨, 0F : 패스워드가 잘못됨
[S>C 1065B] 01 00 .short .long 00 00 00 00 .1048B 00 37 cb ce 3f // 정상일 때

시작 프로젝트 4Leaf


음...
그냥...
심심해서...
(랄까)...

라고 하면 때릴건가염;;

암튼간에... 4Leaf 0.96d 클라를 주운관계로... 한번 삽질해봅니당 :D
음... 언어는 많은 고민을 해봤지만...
(Visual C# 으로 할려고했는데... 리눅스컴파일을 소망해서... RealBasic 로 제작하기로 결정... ㄲㄲ)

로그인창까지는 우여곡절(사실은 몇시간만에 뚝딱한...) 끝에... 띄울수 있었지만... 이 뒤부터가 문제랄까;; 흠;;

초고속으로 만든 서버...
일단은 윈도우에서 프로그래밍하고, 윈도우에서 디버깅하고있지만...
나중엔... 리눅스바이너리로 빌드하게 될 듯... 'ㅅ';;


이 부분까지는 만들어졌다... 후덜덜...
겨우 여기까지 오는데... 너무 오랜시간이 걸렸다... ㅠㅠ

Visual Basic 2008 : 구조체 - 바이트배열 상호변환 뚝딱 만들기



통신을 할때... 패킷의 규격을 정하고
이 규격에 맞게 구조체를 만든다음,
소켓으로 구조체를 던지고 받는다면 참 편리할 것이다.
다만... 비주얼베이직의 경우에는 이 구조체라는 Object 를 바로 던지고 받고 할 수 없다는 문제가 있다.
VB6 의 경우라면 API함수를 통해 구조체의 메모리포인터를 가지고 바이트배열 변수에 복사해버리는 방법이 있었지만,
VB .NET 의 경우에는 구조체 변수의 메모리포인터를 읽을 도리가 없으니...
하지만... 프레임워크의 도움을 받으면 손쉽게 가능하단다...
그래서... 찌질한 소스를 짜 보았다...
제작까지 30분... 후덜덜...


모듈을 하나 만들고... 그 안에 코딩한다...



Imports System.Runtime.InteropServices ' Marshal 함수가 들어있는 프레임워크 구성원

Module Module1
' 패킷 구조체
<StructLayout(LayoutKind.Sequential)> _
Public Structure Packet
Dim SOH As Byte ' Start of Header : 0x01. Header의 진입점 선언.
Dim pNo As Uint32 ' 패킷의 순번. 4,294,967,295번 초과시 0으로 카운트리셋.
Dim pSize As UInt16 ' 실 데이터(Bydy부분)의 데이터 길이. 단위는 Bytes.
Dim pEnc As Byte ' 데이터의 암호화종류 : 0x00-None 0x01-XOR 0x02-BlowFish 0x03-Base64
Dim pType As UInt16 ' 패킷타입. 시스템메시지, 채팅메시지... 등등...
Dim SOT As Byte ' Start of Text. 0x02. Body의 진입점 선언.
<MarshalAs(UnmanagedType.ByValArray, SizeConst:=65500)> _
Dim Body() As Byte ' 실제로 처리할 데이터 부분.
Dim EXT As Byte ' End of Text. 0x03. 데이터의 종단점 선언.
Dim EOT As Byte ' End of Trance. 0x04. 전송의 종단점 선언.
End Structure

Public Sub Bytes2Structure(ByVal b As Byte(), ByRef s As Object)
Dim StructureType As Type = GetType(Packet)
Dim ibyteIndex As Integer = 0

Dim iStructSize As Integer = Marshal.SizeOf(StructureType)
Dim buffer As IntPtr

If (iStructSize > b.Length) Then
Exit Sub
Else
Buffer = Marshal.AllocHGlobal(iStructSize)
Marshal.Copy(b, ibyteIndex, buffer, iStructSize)
s = Marshal.PtrToStructure(buffer, StructureType)
Marshal.FreeHGlobal(buffer)
End If
End Sub

Public Sub Structure2Bytes(ByVal s As Object, ByRef b As Byte())
Dim iStructSize As Integer = Marshal.SizeOf(s)
Dim buffer As IntPtr = Marshal.AllocHGlobal(iStructSize)

ReDim b(iStructSize - 1)
Marshal.StructureToPtr(s, buffer, False)
Marshal.Copy(buffer, b, 0, iStructSize)
Marshal.FreeHGlobal(buffer)
End Sub
End Module



사용법은 다음과 같다...

// 구조체를 바이트배열에 담을때...
Structure2Bytes([구조체], &ref[바이트배열])
// 바이트배열을 구조체에 담을때...
Bytes2Structure([바이트배열], &ref[구조체])

1 2 3 4 5 6 7 8 9 10 다음

구글 광고



D-Day

스케치판 미니

W 위젯

米 소녀

링크

Sound-Horizon
사운드호라이즌 공식 홈페이지
Aramari's web site
아라마리씨의 개인사이트
Maple Leaf
시모츠키하루카씨의 개인사이트
전민희공식홈페이지
전민희님의 홈페이지
Atelier Tiv egloos
Ti:v(이주영님)의 블로그
소고기친구
소고기친구님의 개인사이트
Snow Ring*Dmyo
디묘님의 개인사이트
island-horizon
황산님의 개인사이트
ObsidianotE
흑요석님의 개인사이트
nineteen19
19님의 개인사이트
감자동8번지
나코파파님의 여고생 전문점
ROBOTA
ROBOTA님의 개인사이트
Croove web
Croove(류휘만)님의 홈페이지
talkback swiiitch - ESTi
ESTi(박진배)님의 블로그
Forte Escape
Forte Escape님의 블로그
New Caizer.com !!
카이져닷컴 ! - Mac소식, 잡담
Artfrige on iLife
디자이너 artfrige님의 블로그
아이런메이든
아이런메이든님의 블로그
망상 블로그
"루트 칠의 법칙 작용중"
논리에러의 독백공간
"..."
Open Sea
"떠돌이의 허접한 우분투 이야기"

Google AdSense

DJMAX Technika OST