You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							184 lines
						
					
					
						
							5.4 KiB
						
					
					
				
			
		
		
	
	
							184 lines
						
					
					
						
							5.4 KiB
						
					
					
				| using QFrameworkCP; | |
| using UnityEngine; | |
| using System; | |
| using System.Text; | |
| using System.Net.Sockets; | |
| using System.IO; | |
| using System.Threading.Tasks; | |
| using System.Threading; | |
| using System.Net.NetworkInformation; | |
|  | |
| namespace JXSoft | |
| { | |
|     public class TCPUtility : IUtility | |
|     { | |
|         public string tcpAddress; | |
|         public int tcpPort; | |
|         public TcpClient tcpClient; | |
|         public NetworkStream sendStream; | |
|         public bool isOpenTCP = false; | |
|         public bool isReceivedValue = false; | |
|         public string receivedData = ""; | |
|         public string exceptionData = ""; | |
|  | |
|         public Thread reciveT; | |
|         public bool isTimeOut = false; | |
|  | |
|         public TCPUtility() { | |
|             Debug.LogWarning("使用无参数构造tcp时,需要手动开启tcp服务"); | |
|  | |
|         } | |
|         public TCPUtility(string tcpAddress, int tcpPort) | |
|         { | |
|             this.tcpAddress = tcpAddress; | |
|             this.tcpPort = tcpPort; | |
|             this.isTimeOut = false; | |
|             StartTCPClient(); | |
|         } | |
|         public bool StartTCPClient() | |
|         { | |
|             isTimeOut = false; | |
|             if (!isOpenTCP) | |
|             { | |
|                 try { | |
|                     tcpClient = new TcpClient(tcpAddress, tcpPort); | |
|                     sendStream = tcpClient.GetStream(); | |
|                 } | |
|                 catch (Exception e) | |
|                 { | |
|                     exceptionData = e.ToString(); | |
|                     return false; | |
|                 } | |
|                 isOpenTCP = true; | |
|                 reciveT = new Thread(RecciveMsg); | |
|                 reciveT.IsBackground = true; | |
|                 reciveT.Start(); | |
|                 return true; | |
|             } | |
|             return false; | |
|         } | |
|         public bool StartTCPClient(string ip, int port) { | |
|             isTimeOut = false; | |
|             if (!isOpenTCP) { | |
|                 tcpAddress = ip; | |
|                 tcpPort = port; | |
|                 try | |
|                 { | |
|                     tcpClient = new TcpClient(tcpAddress, tcpPort); | |
|                     sendStream = tcpClient.GetStream(); | |
|                 } | |
|                 catch (Exception e) | |
|                 { | |
|                     exceptionData = e.ToString(); | |
|                     return false; | |
|                 } | |
|                 isOpenTCP = true; | |
|                 reciveT = new Thread(RecciveMsg); | |
|                 reciveT.IsBackground = true; | |
|                 reciveT.Start(); | |
|                 return true; | |
|             } | |
|             return false; | |
|         } | |
|  | |
|         public void CloseTCPClient() { | |
|             if (tcpClient.Connected) { | |
|                 sendStream.Close(); | |
|                 tcpClient.Close(); | |
|                 isOpenTCP = false; | |
|                 reciveT.Abort(); | |
|             } | |
|         } | |
|  | |
|         public void sendData(string data) | |
|         { | |
|             if (isOpenTCP == false) | |
|                 return; | |
|             byte[] sendBytes = Encoding.Default.GetBytes(data); | |
|             sendStream.Write(sendBytes, 0, sendBytes.Length); | |
|         } | |
|  | |
|         public void RecciveMsg() | |
|         { | |
|             byte[] receiveBuff = new byte[1024]; | |
|             int reviceLength = 0; | |
|             string msg = ""; | |
|             while (isOpenTCP) | |
|             { | |
|                 try | |
|                 { | |
|                     reviceLength = tcpClient.Client.Receive(receiveBuff); | |
|                     msg = Encoding.UTF8.GetString(receiveBuff, 0, reviceLength); | |
|                     if (msg != "") | |
|                     { | |
|                         receivedData = msg; | |
|                         isReceivedValue = true; | |
|                     } | |
|                 } | |
|                 catch (Exception e) | |
|                 { | |
|                     Debug.LogWarning(e); | |
|                     //断线发送异常 | |
|                     isTimeOut = true; | |
|                     exceptionData = e.ToString(); | |
|                     break; | |
|                 } | |
|             } | |
|             Debug.Log("------------end While-------------"); | |
|         } | |
|  | |
|         /// <summary> | |
|         /// 线程接收到消息后 | |
|         /// </summary> | |
|         /// <returns>接收到的消息</returns> | |
|         public string getReceivedValue() { | |
|             if (isReceivedValue) | |
|             { | |
|                 isReceivedValue = false; | |
|                 return receivedData; | |
|             } | |
|             else { | |
|                 return ""; | |
|             } | |
|         } | |
|  | |
|         public bool getTimeOutState() { | |
|             return isTimeOut; | |
|         } | |
|  | |
|         public bool IsReceivedMsg() { | |
|             return sendStream.Length != 0; | |
|         } | |
|         public bool IsConnected() { | |
|             return tcpClient.Connected; | |
|         } | |
|  | |
|         /// <summary> | |
|         /// 获取本机IP | |
|         /// </summary> | |
|         /// <returns>string :ip地址</returns> | |
|         public string GetIP() | |
|         { | |
|             string output = ""; | |
|  | |
|             foreach (NetworkInterface item in NetworkInterface.GetAllNetworkInterfaces()) | |
|             { | |
|                 NetworkInterfaceType _type1 = NetworkInterfaceType.Wireless80211;  //无线局域网适配器  | |
|  | |
|                 if ((item.NetworkInterfaceType == _type1) && item.OperationalStatus == OperationalStatus.Up) | |
|                 { | |
|                     foreach (UnicastIPAddressInformation ip in item.GetIPProperties().UnicastAddresses) | |
|                     { | |
|                         if (ip.Address.AddressFamily == AddressFamily.InterNetwork) | |
|                         { | |
|                             output = ip.Address.ToString(); | |
|                         } | |
|                     } | |
|                 } | |
|             } | |
|             return output; | |
|         } | |
|     } | |
|      | |
|  | |
| }
 | |
| 
 |