129 lines
3.5 KiB
C#
129 lines
3.5 KiB
C#
using System.Collections;
|
|
using System.Collections.Generic;
|
|
using System.Net.Sockets;
|
|
using System.Net;
|
|
using UnityEngine;
|
|
using System;
|
|
using System.Text;
|
|
using System.Net.Http;
|
|
using System.Linq;
|
|
|
|
public class TCP_Client : MonoBehaviour
|
|
{
|
|
TcpClient tcpClient;
|
|
byte[] readbuffer = new byte[1024];
|
|
// private string ip = "172.16.1.253";
|
|
private string ip = "127.0.0.1";
|
|
private int port = 15962;
|
|
|
|
void Start()
|
|
{
|
|
StartTcpClient();
|
|
}
|
|
|
|
private void OnDestroy()
|
|
{
|
|
if (tcpClient != null)
|
|
{
|
|
tcpClient.Close();
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// 启动tcp连接
|
|
/// </summary>
|
|
private void StartTcpClient()
|
|
{
|
|
tcpClient = new TcpClient();
|
|
StartCoroutine(ReConnect());
|
|
}
|
|
|
|
[HideInInspector]
|
|
public bool isconnecting = false;
|
|
/// <summary>
|
|
/// 检测重连
|
|
/// </summary>
|
|
/// <returns></returns>
|
|
IEnumerator ReConnect()
|
|
{
|
|
while (true)
|
|
{
|
|
if (!tcpClient.Connected && !isconnecting)
|
|
{
|
|
Debug.Log("重新连接");
|
|
tcpClient = new TcpClient();
|
|
isconnecting = true;
|
|
tcpClient.BeginConnect(IPAddress.Parse(ip), port, Connected, null);
|
|
}
|
|
|
|
yield return new WaitForSeconds(3);
|
|
}
|
|
}
|
|
private void Connected(IAsyncResult ar)
|
|
{
|
|
try
|
|
{
|
|
tcpClient.EndConnect(ar);
|
|
if (tcpClient.Connected)
|
|
{
|
|
Debug.Log("连接成功");
|
|
tcpClient.GetStream().BeginRead(readbuffer, 0, 1024, Recived, null);
|
|
//发送appid
|
|
byte[] tmp = Encoding.UTF8.GetBytes("Id:" + CallForTest.instance.Appid);
|
|
tcpClient.GetStream().Write(tmp, 0, tmp.Length);
|
|
Debug.Log("发送appid成功");
|
|
}
|
|
else
|
|
{
|
|
Debug.LogError("连接失败");
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
Debug.LogError(ex.Message);
|
|
}
|
|
isconnecting = false;
|
|
}
|
|
private void Recived(IAsyncResult ar)
|
|
{
|
|
try
|
|
{
|
|
int length = tcpClient.GetStream().EndRead(ar);
|
|
if (length == 0)
|
|
{
|
|
Debug.Log("已断开连接");
|
|
tcpClient.Close();
|
|
return;
|
|
}
|
|
else
|
|
{
|
|
tcpClient.GetStream().BeginRead(readbuffer, 0, 1024, Recived, null);
|
|
string str = Encoding.UTF8.GetString(readbuffer, 0, length);
|
|
Debug.Log(str);
|
|
CallForTest.instance.infos.Add("TCP参数: "+str);
|
|
string ticket = str.Split(' ').ToList().Find(a => a.StartsWith("ticket="));
|
|
string component_type = str.Split(' ').ToList().Find(a => a.StartsWith("component_type="));
|
|
if (ticket != null && component_type!=null)
|
|
{
|
|
CallForTest.instance.doChangTask = ticket.Split("ticket=")[1];
|
|
CallForTest.instance.doChangeType = component_type.Split("component_type=")[1];
|
|
}
|
|
}
|
|
}
|
|
catch (Exception e)
|
|
{
|
|
Debug.LogError(e.Message);
|
|
if (tcpClient.Connected)
|
|
{
|
|
tcpClient.GetStream().BeginRead(readbuffer, 0, 1024, Recived, null);
|
|
}
|
|
else
|
|
{
|
|
Debug.Log("失去连接");
|
|
tcpClient.Close();
|
|
}
|
|
return;
|
|
}
|
|
}
|
|
}
|