@@ -45,14 +45,14 @@ public static UInt32 iclock()
45
45
#endregion
46
46
47
47
48
- public KcpChannel ( string ip , int port , Action < byte [ ] > reveiveHandler )
48
+ public KcpChannel ( int port , Action < byte [ ] > reveiveHandler )
49
49
{
50
50
_allEndPoint = new IPEndPoint ( IPAddress . Parse ( "255.255.255.255" ) , port ) ;
51
51
_recEndPoint = new IPEndPoint ( IPAddress . Any , 0 ) ;
52
52
53
53
_reveiveHandler = reveiveHandler ;
54
54
55
- _udpClient = new UdpClient ( new IPEndPoint ( IPAddress . Parse ( ip ) , port ) ) ;
55
+ _udpClient = new UdpClient ( new IPEndPoint ( IPAddress . Any , port ) ) ;
56
56
_kcp = new KCP ( ( UInt32 ) new Random ( ( int ) DateTime . Now . Ticks ) . Next ( 1 , Int32 . MaxValue ) ,
57
57
UdpSendData ) ;
58
58
@@ -62,13 +62,22 @@ public KcpChannel(string ip,int port,Action<byte[]> reveiveHandler)
62
62
63
63
_receiveMeesages = new Queue < byte [ ] > ( ) ;
64
64
65
- Thread revThread = new Thread ( ReceiveMessage ) ;
66
- revThread . Start ( ) ;
67
- Thread updataThread = new Thread ( Update ) ;
65
+ _udpClient . BeginReceive ( ReceiveMessage , this ) ;
66
+
67
+ Thread updataThread = new Thread ( Update ) ;
68
68
updataThread . Start ( ) ;
69
- }
69
+ updataThread . IsBackground = true ;
70
+ }
71
+
72
+ private void ReceiveMessage ( IAsyncResult asyncCallback )
73
+ {
74
+ byte [ ] datas = _udpClient . EndReceive ( asyncCallback , ref _recEndPoint ) ;
75
+ _receiveMeesages . Enqueue ( datas ) ;
76
+ _udpClient ? . BeginReceive ( ReceiveMessage , this ) ;
77
+ }
78
+
70
79
71
- public void Connect ( string ip , int port )
80
+ public void Connect ( string ip , int port )
72
81
{
73
82
_targetEndPoinnt = new IPEndPoint ( IPAddress . Parse ( ip ) , port ) ;
74
83
_currentEndPoint = _targetEndPoinnt ;
@@ -86,42 +95,34 @@ public void Send(byte[] datas,bool toAll=false)
86
95
_currentEndPoint = _allEndPoint ;
87
96
else
88
97
_currentEndPoint = _targetEndPoinnt ;
89
- _kcp ? . Send ( datas ) ;
90
- }
91
-
92
- private void ReceiveMessage ( )
93
- {
94
- while ( true )
95
- {
96
- byte [ ] datas = _udpClient . Receive ( ref _recEndPoint ) ;
97
- if ( datas != null )
98
- {
99
- _receiveMeesages . Enqueue ( datas ) ;
100
- }
101
- }
98
+ _kcp ? . Send ( datas ) ;
102
99
}
103
100
101
+
104
102
private void Update ( )
105
103
{
106
- while ( _receiveMeesages . Count > 0 )
107
- {
108
- var buf = _receiveMeesages . Dequeue ( ) ;
109
-
110
- _kcp . Input ( buf ) ;
111
- // mNeedUpdateFlag = true;
112
-
113
- for ( var size = _kcp . PeekSize ( ) ; size > 0 ; size = _kcp . PeekSize ( ) )
114
- {
115
- var buffer = new byte [ size ] ;
116
- if ( _kcp . Recv ( buffer ) > 0 )
117
- {
118
- _reveiveHandler ( buffer ) ;
119
- }
120
- }
121
- }
122
-
123
- _kcp . Update ( iclock ( ) ) ;
124
- Thread . Sleep ( 10 ) ;
104
+ while ( true )
105
+ {
106
+ if ( _receiveMeesages . Count > 0 )
107
+ {
108
+ var buf = _receiveMeesages . Dequeue ( ) ;
109
+
110
+ _kcp . Input ( buf ) ;
111
+ // mNeedUpdateFlag = true;
112
+
113
+ for ( var size = _kcp . PeekSize ( ) ; size > 0 ; size = _kcp . PeekSize ( ) )
114
+ {
115
+ var buffer = new byte [ size ] ;
116
+ if ( _kcp . Recv ( buffer ) > 0 )
117
+ {
118
+ _reveiveHandler ( buffer ) ;
119
+ }
120
+ }
121
+ }
122
+
123
+ _kcp . Update ( iclock ( ) ) ;
124
+ Thread . Sleep ( 10 ) ;
125
+ }
125
126
}
126
127
127
128
0 commit comments