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);
}
받 은 처리 위 코드 에 일부 소개 가 있 습 니 다. 제 이 슨 데 이 터 를 가 져 온 후에 분석 호출 을 하면 됩 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Unity 공부 일지~블렌드 셰이프 조작 방법 그 ①게임을 만들고 싶다 ~라고 생각하고 마지막 날부터 Unity를 만지기 시작했습니다 HITOMI2236입니다. 이번 블렌드 셰이프에 대해 조사했으므로 여기에 기록하려고 합니다. 개인용 메모입니다만, 만약 같은 곳에서 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.