001 //分别创建了两个线程客户端服务器连接的简单示例
002
003 usingUnityEngine;
004
005 usingSystem;
006
007 usingSystem.Collections;
008
009 usingSystem.Threading;
010
011 usingSystem.Net.Sockets;
012
013 usingSystem.Net;
014
015 usingSystem.Text;
016
017 publicclass TCPIPClientServer : MonoBehaviour
018
019 {
020
021 void Start()
022
023 {
024
025 Debug.Log(GetIP().ToString());
026
027 }
028
029 publicstatic Socket ClientSocket;
030
031 privatevoid InitConnect()
032
033 {
034
035 ClientSocket =new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
036
037 string ip = GetIP().ToString();//服务器ip
038
039 IPAddress ipa = IPAddress.Parse(ip);
040
041 IPEndPoint iep =new IPEndPoint(ipa, 8000);
042
043 try
044
045 {
046
047 ClientSocket.Connect(iep);//连接到服务器
048
049 Thread thread =new Thread(new ThreadStart(ClientReceive));
050
051 thread.Start();
052
053 }
054
055 catch(Exception ex)
056
057 {
058
059 Debug.Log(ex.Message);
060
061 clientReceiveValue = ex.Message;
062
063 }
064
065 }
066
067
068
069 /*接收来自服务器上的信息*/
070
071 publicvoid ClientReceive()
072
073 {
074
075 clientReceiveValue ="已经建立连接准备接受数据";
076
077 while(true)
078
079 {
080
081 byte[] bytes =newbyte[100];
082
083 int rev = ClientSocket.Receive(bytes, bytes.Length, 0);//将数据从连接的 Socket 接收到接收缓冲区的特定位置。
084
085 if(rev <=0)
086
087 {
088
089 break;
090
091 }
092
093 string strev = System.Text.Encoding.Default.GetString(bytes);
094
095 clientReceiveValue =("服务器对客户端说:"+ strev +"\r\n");
096
097 }
098
099 }
100
101
102
103
104
105 privatevoid ClientSend()
106
107 {
108
109 if(ClientSocket.Connected)//判断Socket是否已连接
110
111 {
112
113
114
115 byte[] SendMessage =newbyte[100];
116
117 SendMessage = Encoding.ASCII.GetBytes(clientSendValue);
118
119 ClientSocket.Send(SendMessage);//从数据中的指示位置开始将数据发送到连接的Socket。
120
121
122
123 }
124
125 else
126
127 {
128
129 Debug.Log("未建立连接!");
130
131 clientSendValue ="未建立连接!";
132
133 }
134
135 }
136
137
138
139 privatestring clientReceiveValue ="";
140
141 privatestring clientSendValue ="";
142
143 privatestring serverReceiveValue ="";
144
145 privatestring serverSendValue ="";
146
147 void OnGUI()
148
149 {
150
151 //服务器
152
153 GUI.TextField(new Rect(100, 100, 200, 50), serverReceiveValue);
154
155 if(GUI.Button(new Rect(310, 100, 100, 20), "开始监听"))
156
157 {
158
159 Listen();
160
161 }
162
163 serverSendValue = GUI.TextField(new Rect(100, 150, 200, 40), serverSendValue);
164
165 if(GUI.Button(new Rect(310, 150, 100, 20), "服务器发送"))
166
167 {
168
169 SeverSend();
170
171 }
172
173
174
175 ///客户端
176
177 GUI.TextField(new Rect(100, 350, 200, 40), clientReceiveValue);
178
179 if(GUI.Button(new Rect(310, 350, 100, 20), "连接服务器"))
180
181 {
182
183 InitConnect();
184
185
186
187 }
188
189
190
191 clientSendValue = GUI.TextField(new Rect(100, 400, 200, 40), clientSendValue);
192
193 if(GUI.Button(new Rect(310, 400, 100, 20), "客户端发送"))
194
195 {
196
197 ClientSend();
198
199 }
200
201 }
202
203
204
205
206
207 Thread LisThread;
208
209 Socket LisSocket;
210
211 Socket newSocket;
212
213 EndPoint point;
214
215 string strmes =String.Empty;
216
217 int port =8000;//定义侦听端口号
218
219 privatevoid Listen()
220
221 {
222
223 LisThread =new Thread(new ThreadStart(BeginListern));//开线程执行BeginListern方法
224
225 LisThread.Start();//线程开始执行
226
227 serverReceiveValue = GetIP().ToString()+"正在监听 ";
228
229 }
230
231
232
233 privatevoid BeginListern()
234
235 {
236
237 LisSocket =new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);//实例化Socket
238
239 IPAddress ServerIp = GetIP();/*获取本地服务器的ip地址 */
240
241 IPEndPoint iep =new IPEndPoint(ServerIp, port);
242
243
244
245 LisSocket.Bind(iep);/*将Socket绑定ip */
246
247 LisSocket.Listen(50);//Socket开始监听
248
249 newSocket = LisSocket.Accept();//获取连接请求的Socket
250
251 /*接收客户端Socket所发的信息 */
252
253 while(true)
254
255 {
256
257 try
258
259 {
260
261
262
263 byte[] byteMessage =newbyte[100];
264
265 newSocket.Receive(byteMessage);//接收信息
266
267 point = newSocket.RemoteEndPoint;//获取客户端的Socket的相关信息
268
269 IPEndPoint IPpoint =(IPEndPoint)point;
270
271 strmes += IPpoint.Address.ToString()+"说"+ Encoding.Default.GetString(byteMessage).Trim(newchar[]{**})+"\r\n";
272
273 serverReceiveValue = strmes;
274
275 }
276
277
278
279 catch(SocketException ex)
280
281 {
282
283 Debug.Log(ex.ToString());
284
285 serverReceiveValue = ex.ToString();
286
287 }
288
289 }
290
291 }
292
293
294
295 private IPAddress GetIP()
296
297 { /*获取本地服务器的ip地址 */
298
299 IPHostEntry iep = Dns.GetHostEntry(Dns.GetHostName());
300
301 IPAddress ip = iep.AddressList[0];
302
303 return ip;
304
305 }
306
307
308
309 privatevoid SeverSend()
310
311 {
312
313 byte[] byteData = Encoding.Default.GetBytes(serverSendValue);
314
315 newSocket.Send(byteData);//发送信息即由服务器往客户端上发信息
316
317 }
318
319
320
321 }
322
002
003 usingUnityEngine;
004
005 usingSystem;
006
007 usingSystem.Collections;
008
009 usingSystem.Threading;
010
011 usingSystem.Net.Sockets;
012
013 usingSystem.Net;
014
015 usingSystem.Text;
016
017 publicclass TCPIPClientServer : MonoBehaviour
018
019 {
020
021 void Start()
022
023 {
024
025 Debug.Log(GetIP().ToString());
026
027 }
028
029 publicstatic Socket ClientSocket;
030
031 privatevoid InitConnect()
032
033 {
034
035 ClientSocket =new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
036
037 string ip = GetIP().ToString();//服务器ip
038
039 IPAddress ipa = IPAddress.Parse(ip);
040
041 IPEndPoint iep =new IPEndPoint(ipa, 8000);
042
043 try
044
045 {
046
047 ClientSocket.Connect(iep);//连接到服务器
048
049 Thread thread =new Thread(new ThreadStart(ClientReceive));
050
051 thread.Start();
052
053 }
054
055 catch(Exception ex)
056
057 {
058
059 Debug.Log(ex.Message);
060
061 clientReceiveValue = ex.Message;
062
063 }
064
065 }
066
067
068
069 /*接收来自服务器上的信息*/
070
071 publicvoid ClientReceive()
072
073 {
074
075 clientReceiveValue ="已经建立连接准备接受数据";
076
077 while(true)
078
079 {
080
081 byte[] bytes =newbyte[100];
082
083 int rev = ClientSocket.Receive(bytes, bytes.Length, 0);//将数据从连接的 Socket 接收到接收缓冲区的特定位置。
084
085 if(rev <=0)
086
087 {
088
089 break;
090
091 }
092
093 string strev = System.Text.Encoding.Default.GetString(bytes);
094
095 clientReceiveValue =("服务器对客户端说:"+ strev +"\r\n");
096
097 }
098
099 }
100
101
102
103
104
105 privatevoid ClientSend()
106
107 {
108
109 if(ClientSocket.Connected)//判断Socket是否已连接
110
111 {
112
113
114
115 byte[] SendMessage =newbyte[100];
116
117 SendMessage = Encoding.ASCII.GetBytes(clientSendValue);
118
119 ClientSocket.Send(SendMessage);//从数据中的指示位置开始将数据发送到连接的Socket。
120
121
122
123 }
124
125 else
126
127 {
128
129 Debug.Log("未建立连接!");
130
131 clientSendValue ="未建立连接!";
132
133 }
134
135 }
136
137
138
139 privatestring clientReceiveValue ="";
140
141 privatestring clientSendValue ="";
142
143 privatestring serverReceiveValue ="";
144
145 privatestring serverSendValue ="";
146
147 void OnGUI()
148
149 {
150
151 //服务器
152
153 GUI.TextField(new Rect(100, 100, 200, 50), serverReceiveValue);
154
155 if(GUI.Button(new Rect(310, 100, 100, 20), "开始监听"))
156
157 {
158
159 Listen();
160
161 }
162
163 serverSendValue = GUI.TextField(new Rect(100, 150, 200, 40), serverSendValue);
164
165 if(GUI.Button(new Rect(310, 150, 100, 20), "服务器发送"))
166
167 {
168
169 SeverSend();
170
171 }
172
173
174
175 ///客户端
176
177 GUI.TextField(new Rect(100, 350, 200, 40), clientReceiveValue);
178
179 if(GUI.Button(new Rect(310, 350, 100, 20), "连接服务器"))
180
181 {
182
183 InitConnect();
184
185
186
187 }
188
189
190
191 clientSendValue = GUI.TextField(new Rect(100, 400, 200, 40), clientSendValue);
192
193 if(GUI.Button(new Rect(310, 400, 100, 20), "客户端发送"))
194
195 {
196
197 ClientSend();
198
199 }
200
201 }
202
203
204
205
206
207 Thread LisThread;
208
209 Socket LisSocket;
210
211 Socket newSocket;
212
213 EndPoint point;
214
215 string strmes =String.Empty;
216
217 int port =8000;//定义侦听端口号
218
219 privatevoid Listen()
220
221 {
222
223 LisThread =new Thread(new ThreadStart(BeginListern));//开线程执行BeginListern方法
224
225 LisThread.Start();//线程开始执行
226
227 serverReceiveValue = GetIP().ToString()+"正在监听 ";
228
229 }
230
231
232
233 privatevoid BeginListern()
234
235 {
236
237 LisSocket =new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);//实例化Socket
238
239 IPAddress ServerIp = GetIP();/*获取本地服务器的ip地址 */
240
241 IPEndPoint iep =new IPEndPoint(ServerIp, port);
242
243
244
245 LisSocket.Bind(iep);/*将Socket绑定ip */
246
247 LisSocket.Listen(50);//Socket开始监听
248
249 newSocket = LisSocket.Accept();//获取连接请求的Socket
250
251 /*接收客户端Socket所发的信息 */
252
253 while(true)
254
255 {
256
257 try
258
259 {
260
261
262
263 byte[] byteMessage =newbyte[100];
264
265 newSocket.Receive(byteMessage);//接收信息
266
267 point = newSocket.RemoteEndPoint;//获取客户端的Socket的相关信息
268
269 IPEndPoint IPpoint =(IPEndPoint)point;
270
271 strmes += IPpoint.Address.ToString()+"说"+ Encoding.Default.GetString(byteMessage).Trim(newchar[]{**})+"\r\n";
272
273 serverReceiveValue = strmes;
274
275 }
276
277
278
279 catch(SocketException ex)
280
281 {
282
283 Debug.Log(ex.ToString());
284
285 serverReceiveValue = ex.ToString();
286
287 }
288
289 }
290
291 }
292
293
294
295 private IPAddress GetIP()
296
297 { /*获取本地服务器的ip地址 */
298
299 IPHostEntry iep = Dns.GetHostEntry(Dns.GetHostName());
300
301 IPAddress ip = iep.AddressList[0];
302
303 return ip;
304
305 }
306
307
308
309 privatevoid SeverSend()
310
311 {
312
313 byte[] byteData = Encoding.Default.GetBytes(serverSendValue);
314
315 newSocket.Send(byteData);//发送信息即由服务器往客户端上发信息
316
317 }
318
319
320
321 }
322









