Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/unity3d/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Unity3d 两个编辑器之间的Unity 3D通信_Unity3d_Networking_Tcp - Fatal编程技术网

Unity3d 两个编辑器之间的Unity 3D通信

Unity3d 两个编辑器之间的Unity 3D通信,unity3d,networking,tcp,Unity3d,Networking,Tcp,我正在尝试使用简单的tcp客户端/服务器设置在两个编辑器之间传输一些数据: 服务器: using System; using System.Collections; using System.Collections.Generic; using System.Net; using System.Net.Sockets; using System.Text; using System.Threading; using UnityEngine; public class TCPTe

我正在尝试使用简单的tcp客户端/服务器设置在两个编辑器之间传输一些数据:

服务器:

using System;
using System.Collections; 
using System.Collections.Generic; 
using System.Net; 
using System.Net.Sockets; 
using System.Text; 
using System.Threading; 
using UnityEngine;  

public class TCPTestServer : MonoBehaviour {    
    #region private members     
    /// <summary>   
    /// TCPListener to listen for incomming TCP connection  
    /// requests.   
    /// </summary>  
    private TcpListener tcpListener; 
    /// <summary> 
    /// Background thread for TcpServer workload.   
    /// </summary>  
    private Thread tcpListenerThread;   
    /// <summary>   
    /// Create handle to connected tcp client.  
    /// </summary>  
    private TcpClient connectedTcpClient;   
    #endregion  

    // Use this for initialization
    void Start () {         
        // Start TcpServer background thread        
        tcpListenerThread = new Thread (new ThreadStart(ListenForIncommingRequests));       
        tcpListenerThread.IsBackground = true;      
        tcpListenerThread.Start();  
    }   

    // Update is called once per frame
    void Update () {        

            SendMessage();         

    }   

    /// <summary>   
    /// Runs in background TcpServerThread; Handles incomming TcpClient requests    
    /// </summary>  
    private void ListenForIncommingRequests () {        
        try {           
            // Create listener on localhost port 8052.          
            tcpListener = new TcpListener(IPAddress.Parse("myip"), 65535);          
            tcpListener.Start();              
            Debug.Log("Server is listening");              
            Byte[] bytes = new Byte[1024];              
            while (true) {              
                using (connectedTcpClient = tcpListener.AcceptTcpClient()) {                    
                    // Get a stream object for reading                  
                    using (NetworkStream stream = connectedTcpClient.GetStream()) {                         
                        int length;                         
                        // Read incomming stream into byte arrary.                      
                        while ((length = stream.Read(bytes, 0, bytes.Length)) != 0) {                           
                            var incommingData = new byte[length];                           
                            Array.Copy(bytes, 0, incommingData, 0, length);                             
                            // Convert byte array to string message.                            
                            string clientMessage = Encoding.ASCII.GetString(incommingData);                             
                            Debug.Log("client message received as: " + clientMessage);                      
                        }                   
                    }               
                }           
            }       
        }       
        catch (SocketException socketException) {           
            Debug.Log("SocketException " + socketException.ToString());         
        }     
    }   
    /// <summary>   
    /// Send message to client using socket connection.     
    /// </summary>  
    private void SendMessage() {        
        if (connectedTcpClient == null) {             
            return;         
        }       

        try {           
            // Get a stream object for writing.             
            NetworkStream stream = connectedTcpClient.GetStream();          
            if (stream.CanWrite) {                 
                string serverMessage = this.gameObject.transform.position.ToString();           
                // Convert string message to byte array.                 
                byte[] serverMessageAsByteArray = Encoding.ASCII.GetBytes(serverMessage);               
                // Write byte array to socketConnection stream.               
                stream.Write(serverMessageAsByteArray, 0, serverMessageAsByteArray.Length);               
                Debug.Log("Server sent his message - should be received by client");           
            }       
        }       
        catch (SocketException socketException) {             
            Debug.Log("Socket exception: " + socketException);         
        }   
    } 

    void OnApplicationQuit()
    {
        tcpListenerThread.Abort();
        connectedTcpClient.Close ();

    }
}
使用系统;
使用系统集合;
使用System.Collections.Generic;
Net系统;
使用System.Net.Sockets;
使用系统文本;
使用系统线程;
使用UnityEngine;
公共类TCPTestServer:MonoBehavior{
#区域私人成员
///    
///TCPListener侦听是否输入TCP连接
///请求。
///   
私人TcpListener TcpListener;
///  
///TcpServer工作负载的后台线程。
///   
私有线程tcpListenerThread;
///    
///创建连接到tcp客户端的句柄。
///   
专用TCP客户端连接的TCP客户端;
#端区
//用于初始化
void Start(){
//启动TcpServer后台线程
tcpListenerThread=newthread(newthreadstart(ListenForIncommingRequests));
tcpListenerThread.IsBackground=true;
tcpListenerThread.Start();
}   
//每帧调用一次更新
无效更新(){
SendMessage();
}   
///    
///在后台TcpServerThread中运行;处理未提交的TcpClient请求
///   
私有void listenforincomingrequests(){
试试{
//在本地主机端口8052上创建侦听器。
tcpListener=newtcplistener(IPAddress.Parse(“myip”),65535);
tcpListener.Start();
Log(“服务器正在侦听”);
字节[]字节=新字节[1024];
虽然(正确){
正在使用(connectedTcpClient=tcpListener.AcceptTcpClient()){
//获取用于读取的流对象
使用(NetworkStream=connectedTcpClient.GetStream()){
整数长度;
//将输入流读入字节数组。
而((length=stream.Read(bytes,0,bytes.length))!=0){
var incommingData=新字节[长度];
复制(字节,0,输入数据,0,长度);
//将字节数组转换为字符串消息。
string clientMessage=Encoding.ASCII.GetString(输入数据);
Log(“接收的客户端消息为:“+clientMessage”);
}                   
}               
}           
}       
}       
catch(SocketException SocketException){
Log(“SocketException”+SocketException.ToString());
}     
}   
///    
///使用套接字连接向客户端发送消息。
///   
私有void SendMessage(){
如果(connectedTcpClient==null){
返回;
}       
试试{
//获取用于写入的流对象。
NetworkStream=connectedTcpClient.GetStream();
如果(stream.CanWrite){
string serverMessage=this.gameObject.transform.position.ToString();
//将字符串消息转换为字节数组。
字节[]serverMessageAsByteArray=Encoding.ASCII.GetBytes(serverMessage);
//将字节数组写入socketConnection流。
Write(serverMessageAsByteArray,0,serverMessageAsByteArray.Length);
Log(“服务器发送了他的消息-客户端应该收到”);
}       
}       
catch(SocketException SocketException){
Log(“套接字异常:+socketException”);
}   
} 
在Application Quit()上无效
{
tcpListenerThread.Abort();
connectedTcpClient.Close();
}
}
客户:

using System;
using System.Collections;
using System.Collections.Generic;
using System.Net.Sockets;
using System.Text;
using System.Threading;
using UnityEngine;

public class TCPTestClient : MonoBehaviour {    
    #region private members     
    private TcpClient socketConnection;     
    private Thread clientReceiveThread;     
    #endregion      
    // Use this for initialization  
    void Start () {
        ConnectToTcpServer();     
    }   
    // Update is called once per frame
    void Update () {         
        if (Input.GetKeyDown(KeyCode.Space)) {             
            SendMessage();         
        }     
    }   
    /// <summary>   
    /// Setup socket connection.    
    /// </summary>  
    private void ConnectToTcpServer () {        
        try {           
            clientReceiveThread = new Thread (new ThreadStart(ListenForData));          
            clientReceiveThread.IsBackground = true;            
            clientReceiveThread.Start();        
        }       
        catch (Exception e) {           
            Debug.Log("On client connect exception " + e);      
        }   
    }   
    /// <summary>   
    /// Runs in background clientReceiveThread; Listens for incomming data.     
    /// </summary>     
    private void ListenForData() {      
        try {           
            socketConnection = new TcpClient("myip", 65535);            
            Byte[] bytes = new Byte[1024];             
            while (true) {              
                // Get a stream object for reading              
                using (NetworkStream stream = socketConnection.GetStream()) {                   
                    int length;                     
                    // Read incomming stream into byte arrary.                  
                    while ((length = stream.Read(bytes, 0, bytes.Length)) != 0) {                       
                        var incommingData = new byte[length];                       
                        Array.Copy(bytes, 0, incommingData, 0, length);                         
                        // Convert byte array to string message.                        
                        string serverMessage = Encoding.ASCII.GetString(incommingData);                         
                        Debug.Log("server message received as: " + serverMessage);                  
                    }               
                }           
            }         
        }         
        catch (SocketException socketException) {             
            Debug.Log("Socket exception: " + socketException);         
        }     
    }   
    /// <summary>   
    /// Send message to server using socket connection.     
    /// </summary>  
    private void SendMessage() {         
        if (socketConnection == null) {             
            return;         
        }       
        try {           
            // Get a stream object for writing.             
            NetworkStream stream = socketConnection.GetStream();            
            if (stream.CanWrite) {                 
                string clientMessage = "This is a message from one of your clients.";               
                // Convert string message to byte array.                 
                byte[] clientMessageAsByteArray = Encoding.ASCII.GetBytes(clientMessage);               
                // Write byte array to socketConnection stream.                 
                stream.Write(clientMessageAsByteArray, 0, clientMessageAsByteArray.Length);                 
                //Debug.Log("Client sent his message - should be received by server");             
            }         
        }       
        catch (SocketException socketException) {             
            Debug.Log("Socket exception: " + socketException);         
        }     
    } 

    void OnApplicationQuit()
    {
        clientReceiveThread.Abort();
        socketConnection.Close ();

    }
}
使用系统;
使用系统集合;
使用System.Collections.Generic;
使用System.Net.Sockets;
使用系统文本;
使用系统线程;
使用UnityEngine;
公共类TCPTestClient:MonoBehavior{
#区域私人成员
专用TCP客户端套接字连接;
私有线程clientReceiveThread;
#端区
//用于初始化
无效开始(){
connecttotcserver();
}   
//每帧调用一次更新
无效更新(){
if(Input.GetKeyDown(KeyCode.Space)){
SendMessage();
}     
}   
///    
///设置套接字连接。
///   
私有void connecttotcserver(){
试试{
clientReceiveThread=新线程(新线程开始(ListenForData));
clientReceiveThread.IsBackground=true;
clientReceiveThread.Start();
}       
捕获(例外e){
Log(“在客户端连接异常上”+e);
}   
}   
///    
///在后台clientReceiveThread中运行;侦听输入数据。
///      
私有void ListenForData(){
试试{
socketConnection=新的TcpClient(“myip”,65535);
字节[]字节=新字节[1024];
虽然(正确){
//得到