Unity 는 Socket 을 사용 하여 배경 과 연결 하여 JSon 의 읽 기와 쓰 기 를 포함 합 니 다.

4393 단어 Unity3D
      ,            ,           !

저 는 Socket 과 배경 을 연결 하고 데이터 전송 은 JSon 형식 을 사용 합 니 다.제로 부터 시작 해서 예전 에는 서버 와 연결 한 경험 이 없 었 기 때문에 인터넷 의 일부 자 료 를 결합 시 켰 다.먼저 전체적인 사 고 를 말씀 드 리 겠 습 니 다. 여 기 는 비동기 로 스 레 드 를 새로 만 들 고 데 이 터 를 받 으 며 대기 열 에 저장 하여 호출 분석 을 합 니 다.
Socket 의 생 성과 링크:
using UnityEngine;
using System.Collections.Generic;
using System.Collections;using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Threading;

public class TcpClientHandler:MonoBehaviour
{
	Socket serverSocket; //    socket
	private string ClientIP = "192.168.1.139";//IP  ,     
	IPAddress ip; //  ip
	IPEndPoint ipEnd;
	string recvStr; //      
	string sendStr; //      
	byte[] recvData=new byte[1024]; //     ,     
	byte[] sendData=new byte[1024]; //     ,     
	int recvLen = 0; //       
	Thread connectThread; //    

	private Queue queue = new Queue ();//      ,            

	//      
	public void InitSocket()
	{
		ip=IPAddress.Parse(ClientIP);
		ipEnd=new IPEndPoint(ip,8009); //      ,   
		
		//        
		connectThread=new Thread(new ThreadStart(SocketReceive));
		connectThread.Start();
	}

	//       
	void SocketConnet()
	{
		if(serverSocket!=null)
			serverSocket.Close();
		//       ,         
		serverSocket=new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);
		//  
		serverSocket.Connect(ipEnd);

		recvLen=serverSocket.Receive(recvData);
		recvStr=Encoding.UTF8.GetString(recvData,0,recvLen);
		print(recvStr);
		queue.Enqueue (recvStr);
	}

	public void SocketSend(string sendStr)
	{
		//      
		sendData=new byte[1024];
		//      
		sendData=Encoding.UTF8.GetBytes(sendStr);
		//  
		serverSocket.Send(sendData,sendData.Length,SocketFlags.None);
	}

	void SocketReceive()
	{
		SocketConnet();
		//            
		while(true)
		{
			recvData=new byte[1024];
			recvLen=serverSocket.Receive(recvData);
			if(recvLen==0)
			{
				SocketConnet();
				continue;
			}
			recvStr=Encoding.UTF8.GetString(recvData,0,recvLen);
			queue.Enqueue (recvStr);
			print(recvStr);
		}
	}

	//         
	public string GetRecvStr()
	{
		string returnStr;
		//         
		lock(this)
		{
			if (queue.Count > 0) {//       ,  
				returnStr = queue.Dequeue ();
				return returnStr;
			}		}    
		return null;
	}

	public void SocketQuit()
	{
		//    
		if(connectThread!=null)
		{
			connectThread.Interrupt();
			connectThread.Abort();
		}
		//       
		if(serverSocket!=null)
			serverSocket.Close();
	}
}

그리고 다른 스 크 립 트 에서 서버 시작:
using UnityEngine;
using System.Collections;
using LitJson;
using UnityEngine.SceneManagement;

public class TcpTest:MonoBehaviour
{
	public static TcpTest _instance;
	TcpClientHandler tcpClient;
	JsonData returnDataJson;

	void Awake(){
		DontDestroyOnLoad (this.gameObject);
	}

	// Use this for initialization
	void Start()
	{
		//       
		//tcpClient=new TcpClientHandler(); 
		tcpClient=gameObject.AddComponent();
		tcpClient.InitSocket();
	}
		
	// Update is called once per frame
	void Update()
	{
		returnDataHandle ();
	}

	//          
	void returnDataHandle(){
		returnData = tcpClient.GetRecvStr ();
		//print (returnData);
		if (returnData != null){
			returnDataJson = JsonMapper.ToObject (returnData);
			switch(returnDataJson["cmd"].ToString()){
				//     Json,      ,         ,      
			}
		}
	}	

	void OnApplicationQuit()
	{
		//       
		tcpClient.SocketQuit();
		print ("Quit");
	}

	public void closeC(){//      ,        ,    Unity          ,            ,          ,Unity  
		tcpClient.SocketQuit();
		print ("closeC");
	}
}

마지막 으로 JSon 의 처 리 를 말씀 드 리 겠 습 니 다. 먼저 LitJSon 라 이브 러 리 를 가 져 온 다음 스 크 립 트 에서 using LitJSon 을 사용 해 야 합 니 다.
데이터 전송 예시:
//  
	public void RegisterEvent(string username, string password){
		JsonData registerJson = new JsonData ();
		registerJson ["cmd"] = "Login|register";
		registerJson ["name"] = "wyq";
		registerJson ["tel"] = username;
		registerJson ["psd"] = password;

		string registrStr = registerJson.ToJson();
		tcpClient.SocketSend (registrStr);	
	}

받 은 처리 위 코드 에 일부 소개 가 있 습 니 다. 제 이 슨 데 이 터 를 가 져 온 후에 분석 호출 을 하면 됩 니 다.

좋은 웹페이지 즐겨찾기