- 1 using System.Collections;
- 2 using System.Collections.Generic;
- 3 using UnityEngine;
- 4 using System.Net;
- 5 using System.Net.Sockets;
- 6 using System.Threading;
- 7 using System;
- 8
- 9 //综合管理部分
- 10 // 可以供客户端和服务器一块使用
- 11 public class TcpSocket
- 12 {
- 13 private Socket socket;//当前实例化的套接字
- 14 private byte[] data;//socket上的数据
- 15 private bool isServer; //用来区分服务器 还是客户端
- 16
- 17 //构造TcpSocket
- 18 public TcpSocket(Socket socket,int dataLength, bool isServer)
- 19 {
- 20 this.socket = socket;
- 21 data = new byte[dataLength];
- 22 this.isServer = isServer;
- 23 }
- 24 // 接受----->客户端
- 25 public void ClientReceive()
- 26 {
- 27 //data:数据缓存 0:接受位的偏移量 length
- 28 socket.BeginReceive(data,0,data.Length,SocketFlags.None,new AsyncCallback(ClientEndReceive),null);
- 29 }
- 30 public void ClientEndReceive(IAsyncResult ar)
- 31 {
- 32 int receiveLength = socket.EndReceive(ar); //数据的处理
- 33 string dataStr = System.Text.Encoding.UTF8.GetString(data,0, receiveLength); //把接受完毕的字节数组转化为 string类型
- 34 if (isServer)
- 35 { Debug.Log("服务器接受到了:" + dataStr);
- 36 for (int i = 0; i < Server.Instance.clients.Count; i++) //服务器要回什么
- 37 {
- 38 if (Server.Instance.clients[i].ClientConnect())
- 39 {
- 40 Server.Instance.clients[i].ClientSeed(System.Text.Encoding.UTF8.GetBytes("服务器回复:"+ dataStr));
- 41 }
- 42 }
- 43 }else {
- 44 DataManager.Instance.Msg = dataStr;
- 45 Debug.Log("客户端接受到了:" + dataStr);
- 46 }
- 47 }
- 48
- 49
- 50 // 发送---->客户端发送给服务器
- 51 public void ClientSeed(byte[] data)
- 52 {
- 53 socket.BeginSend(data,0, data.Length, SocketFlags.None,new AsyncCallback(ClientSeedEnd),null );
- 54 }
- 55
- 56 private void ClientSeedEnd(IAsyncResult ar)
- 57 {
- 58 socket.EndSend(ar);
- 59 }
- 60
- 61
- 62 //连接----客户端与服务器连接
- 63 public void ClientConnect(string ip,int port)
- 64 {
- 65 socket.BeginConnect(new IPEndPoint(IPAddress.Parse(ip), port),new AsyncCallback(ClientEndConnect),null);
- 66 }
- 67 public void ClientEndConnect(IAsyncResult ar)
- 68 {
- 69 if (ar.IsCompleted) {
- 70 Debug.Log("连接成功");
- 71 }
- 72 socket.EndConnect(ar);
- 73 }
- 74
- 75 // 客户端与服务器是否连接
- 76
- 77 public bool IsClientConnect()
- 78 {
- 79 return socket.Connected;
- 80 }
- 81 //断开连接
- 82 public void ClientClose()
- 83 {
- 84 if (socket!=null&& ISClientConnect())
- 85 {
- 86 socket.Close();
- 87 }
- 88 }
- 89
- 90 }