-
Notifications
You must be signed in to change notification settings - Fork 6
Expand file tree
/
Copy pathSocketClientMng.cs
More file actions
133 lines (122 loc) · 2.77 KB
/
SocketClientMng.cs
File metadata and controls
133 lines (122 loc) · 2.77 KB
1
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
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System.Net.Sockets;
using System.Net;
using System;
public class SocketClientMng : MngBase
{
private Socket socket;
private byte[] buffer = new byte[m_BufferLength];
private const int m_BufferLength = 1024*1024;
private int m_BufferSize=0; //数组的实际占用的长度
public override void Init()
{
SocketUnPack.Init();
EventTool.Add<byte[]>(EventName.SocketClient.Send,send);
EventTool.Add<string,int>(EventName.SocketClient.ConnectServer,connectServer);
EventTool.Add(EventName.SocketClient.CloseConnect,closeConnect);
}
private void send(byte[] sendData)
{
if(socket!=null)
{
try
{
socket.BeginSend(sendData,0,sendData.Length,0,new AsyncCallback((ar)=>
{
try
{
Socket handler = (Socket)ar.AsyncState;
handler.EndSend(ar);
}
catch(Exception e)
{
socket = null;
Debug.LogError("[ServerMng.Send]信息发送失败:"+e);
}
}),socket);
}
catch(Exception e)
{
socket = null;
Debug.LogError("[ServerMng.Send]信息发送失败:"+e);
}
}
else
{
Debug.LogError("[ServerMng.Send]socket为空!");
}
}
private void connectServer(string ipStr,int port)
{
if(socket!=null)
{
socket.Close();
}
socket = new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);
try
{
socket.BeginConnect(IPAddress.Parse(ipStr),port,new AsyncCallback((ar)=>
{
try
{
Socket handler = (Socket)ar.AsyncState;
handler.EndConnect(ar);
Debug.Log("[ServerMng.ConnectServer]连接服务器成功");
receiveData();
}
catch(Exception e)
{
socket = null;
Debug.LogError("[ServerMng.ConnectServer]连接服务器失败:"+e);
}
}),socket);
}
catch(Exception e)
{
Debug.LogError("[ServerMng.ConnectServer]连接服务器失败:"+e);
}
}
private void receiveData()
{
try
{
socket.BeginReceive(buffer,m_BufferSize, m_BufferLength-m_BufferSize,SocketFlags.None,new AsyncCallback((ar)=>
{
try
{
Socket handler = (Socket)ar.AsyncState;
int rLength = handler.EndReceive(ar);
if(rLength>0)
{
byte[] rData = unPackHead();
EventTool.Run<byte[]>(EventName.SocketClient.ReceiveData,rData);
}
receiveData();
}
catch(Exception e)
{
socket = null;
Debug.LogError("[ServerMng.receiveData]信息接受失败:"+e);
}
}),socket);
}
catch(Exception e)
{
socket = null;
Debug.LogError("[ServerMng.receiveData]信息接受失败:"+e);
}
}
private void closeConnect()
{
socket.Close();
socket=null;
}
private byte[] unPackHead()
{
byte[] rData=null;
//接受消息注意粘包问题
return rData;
}
}