C#服务端:
1
using System;
2
using System.Net.Sockets;
3
using System.Net;
4
using System.IO;
5
using System.Diagnostics;
6
using System.Threading;
7
using System.Runtime.InteropServices;
8
9
10









11
12
13
[StructLayout(LayoutKind.Sequential, Pack = 1)]
14
public struct PaketHead
15
{
16
public UInt32 OPCode;
17
public byte DiskFlag;
18
public long DiskSize;
19
public long OPOffSet;
20
public long OPByteCount;
21
22
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 64)]
23
public byte[] Authentic;
24
public byte Encrypt;
25
public byte Ver;
26
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 64)]
27
public byte[] AddIn;
28
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 16)]
29
public byte[] Reserve;
30
public byte Zero;
31
public int SizeOfHead;
32
}
33
34
protected byte[] Struct2Bytes<T>(T obj)
35
{
36
int size = Marshal.SizeOf(obj);
37
byte[] bytes = new byte[size];
38
IntPtr arrPtr = Marshal.UnsafeAddrOfPinnedArrayElement(bytes, 0);
39
Marshal.StructureToPtr(obj, arrPtr, true);
40
return bytes;
41
}
42
43
protected T Bytes2Struct<T>(byte[] bytes)
44
{
45
IntPtr arrPtr = Marshal.UnsafeAddrOfPinnedArrayElement(bytes, 0);
46
return (T)Marshal.PtrToStructure(arrPtr, typeof(T));
47
}
48
49
protected void ReadPacketHead(BinaryReader ClientReader, BinaryWriter ClientWriter)
50
{
51
byte[] test = null;
52
test = ClientReader.ReadBytes(180);
53
54
PaketHead Paket = Bytes2Struct<PaketHead>(test);
55
56
Console.WriteLine(Paket.OPCode);
57
Console.WriteLine(Paket.DiskFlag);
58
Console.WriteLine(Paket.DiskSize);
59
Console.WriteLine(Paket.OPOffSet);
60
Console.WriteLine(Paket.OPByteCount);
61
Console.WriteLine(System.Text.Encoding.ASCII.GetString(Paket.Authentic));
62
Console.WriteLine(Paket.Encrypt);
63
Console.WriteLine(Paket.Ver);
64
Console.WriteLine(System.Text.Encoding.ASCII.GetString(Paket.AddIn));
65
Console.WriteLine(System.Text.Encoding.ASCII.GetString(Paket.Reserve));
66
Console.WriteLine(Paket.Zero);
67
Console.WriteLine(Paket.SizeOfHead);
68
/////////////////////////////////
69
test = Struct2Bytes<PaketHead>(Paket);
70
ClientWriter.Write(test);
71
}
72
73












2

3

4

5

6

7

8

9

10










11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73












C++ Client:
1
#include <winsock2.h>
2
#pragma comment( lib, "ws2_32.lib" )
3
4
#pragma pack(push, 1)//取消内存大小自动对齐
5
6
typedef struct _PaketHead2
7
{
8
UINT OPCode;/////////////
9
UCHAR DiskFlag;//////////
10
__int64 DiskSize;////////
11
__int64 OPOffSet;////////
12
__int64 OPByteCount;/////
13
UCHAR Authentic[64];//
14
UCHAR Encrypt;////////
15
UCHAR Ver;////////////
16
UCHAR AddIn[64];//////
17
UCHAR Reserve[16];////
18
UCHAR Zero;///////////
19
UINT SizeOfHead;/////////
20
}PaketHead2,*pPaketHead2;
21
22
#pragma pack(pop)
23
24
//template <class T>
25
//void ConvertToByteArray(T arg,unsigned char * Buffer)
26
//{
27
// for (int i=0;i<sizeof(T); i++)
28
// {
29
// int offset = i*8;
30
// Buffer[i] = (arg& (0xff << offset)) >> offset;
31
// }
32
//}
33
//
34
//template <class T>
35
//T ConvertBytesTo(byte *buf)
36
//{
37
// T ret = 0x0;
38
// for (int i=0;i<sizeof(T); i++)
39
// {
40
// int offset = i*8;
41
// ret |= buf[i] << offset;
42
// }
43
// return (ret);
44
//}
45
46
int ConnTest()
47
{
48
SOCKET mySocket;
49
WORD wVersionRequested;
50
WSADATA wsaData;
51
int err;
52
53
wVersionRequested = MAKEWORD( 2, 2 );
54
55
WSAStartup( wVersionRequested, &wsaData );
56
57
try
58
{
59
err = WSAStartup( wVersionRequested, &wsaData );
60
if ( err != 0 ) {
61
printf("Couldn't find a WinSock DLL\n");
62
return 1;
63
}
64
65
if ( LOBYTE( wsaData.wVersion ) != 2 ||
66
HIBYTE( wsaData.wVersion ) != 2 )
67
{
68
printf("Couldn't find the right version for WinSock 2.2\n");
69
WSACleanup( );
70
return 1;
71
}
72
73
SOCKADDR_IN ServerAddr;
74
75
mySocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
76
ServerAddr.sin_family = AF_INET;
77
ServerAddr.sin_port = htons(8021);
78
ServerAddr.sin_addr.s_addr = inet_addr("192.168.0.5");
79
80
81
if (connect(mySocket, (SOCKADDR *) &ServerAddr, sizeof(ServerAddr)))
82
{
83
int error_code = WSAGetLastError();
84
printf("Error connecting socket: %d\n",error_code);
85
return 1;
86
}
87
88
/////////
89
90
PaketHead2 testhead2;
91
92
memset(&testhead2,0x00,sizeof(PaketHead2));
93
94
testhead2.DiskFlag = 0x1;
95
testhead2.OPCode = 9856;
96
testhead2.DiskSize = 78954612;
97
testhead2.OPOffSet = 98643217;
98
testhead2.OPByteCount = 85642311;
99
100
memcpy(testhead2.Authentic,"9876543210ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghij1234567\0",64);
101
memcpy(testhead2.AddIn,"9876543210ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghij1234567\0",64);
102
memcpy(testhead2.Reserve,"abcdefghij12345\0",16);
103
104
testhead2.Encrypt = 0x2;
105
testhead2.Ver = 0x4;
106
testhead2.Zero = 0x0;
107
testhead2.SizeOfHead = sizeof(PaketHead2);
108
109
send(mySocket,(char*)(&testhead2),sizeof(PaketHead2),NULL);
110
111
memset(&testhead2,0x00,sizeof(PaketHead2));
112
recv(mySocket,(char*)(&testhead2),sizeof(PaketHead2),NULL);
113
114
/*testhead2.Authentic[63] = 0;
115
testhead2.AddIn[63] = 0;
116
testhead2.Reserve[15] = 0;*/
117
118
printf("%d\n",testhead2.OPCode);
119
printf("%d\n",testhead2.DiskFlag);
120
121
printf("%ld\n",testhead2.DiskSize);
122
printf("%ld\n",testhead2.OPOffSet);
123
printf("%ld\n",testhead2.OPByteCount);
124
125
printf("%s\n",testhead2.Authentic);
126
printf("%d\n",testhead2.Encrypt);
127
printf("%d\n",testhead2.Ver);
128
129
printf("%s\n",testhead2.AddIn);
130
printf("%s\n",testhead2.Reserve);
131
132
printf("%d\n",testhead2.Zero);
133
134
printf("%d\n",testhead2.SizeOfHead);
135
//////////////////////////////////////////////////
136
closesocket(mySocket);
137
WSACleanup( );
138
}
139
catch(
)
140
{
141
printf("Error!\n");
142
}
143
}

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123

124

125

126

127

128

129

130

131

132

133

134

135

136

137

138

139


140

141

142

143
