winform与unity之间的Socket通讯

本文介绍了一个使用Socket进行Unity服务端与Winform客户端通信的例子。服务端通过监听特定端口接收来自客户端的Pitch、Yaw、Roll参数,并实时更新Unity场景中对象的姿态。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.unity服务端,接收来自winform的Picht, Yaw, Roll
/// <summary>  
/// scoket服务器监听端口脚本  

/// </summary>  
public class SocketServer : MonoBehaviour  
{
    public GameObject obj;
    private Thread thStartServer;//定义启动socket的线程
    private string msg;
    public float Roll,Picht,Yaw;
    private String[] strArray=null; 
void Start()  
{
        thStartServer = new Thread(StartServer);
        thStartServer.Start();//启动该线程  
    }  

void Update()  
{


        obj.transform.eulerAngles = new Vector3(Picht, Yaw, Roll);
    }


    private void StartServer()  
{  
const int bufferSize = 8792;//缓存大小,8192字节  
IPAddress ip = IPAddress.Parse("127.0.0.1");  

TcpListener tlistener = new TcpListener(ip, 8888);  
tlistener.Start();  
Debug.Log("Socket服务器监听启动......");  

TcpClient remoteClient = tlistener.AcceptTcpClient();//接收已连接的客户端,阻塞方法  
Debug.Log("客户端已连接!local:" + remoteClient.Client.LocalEndPoint + "<---Client:" + remoteClient.Client.RemoteEndPoint);  
NetworkStream streamToClient = remoteClient.GetStream();//获得来自客户端的流  
do  
{  
try  //直接关掉客户端,服务器端会抛出异常  
{  
//接收客户端发送的数据部分  
byte[] buffer = new byte[bufferSize];//定义一个缓存buffer数组  
int byteRead = streamToClient.Read(buffer, 0, bufferSize);
if (byteRead == 0)//连接断开,或者在TCPClient上调用了Close()方法,或者在流上调用了Dispose()方法。  
{  
Debug.Log("客户端连接断开......");
break;  
}  
   msg = Encoding.ASCII.GetString(buffer, 0, byteRead);//将传输过来的数据流转换为字符串

                strArray = msg.Split(',');
               // Roll = float.Parse(msg);
                for (int i = 0; i < strArray.Length; i++)
                {
                    Roll = float.Parse( strArray[0]);
                    Picht = float.Parse(strArray[1]);
                    Yaw = float.Parse(strArray[2]);
                }
                Debug.Log(msg);//显示传输过来的字符串
                //tt.GetComponent<Text>().text = msg;


            }  
catch(Exception ex)  
{  
Debug.Log("客户端异常:"+ex.Message);  
break;  
}  
}  
while (true);
    }

   void OnApplicationQuit()  
{
        thStartServer.Abort();//在程序结束时杀掉线程
}  

2.在winform端代码

public partial class Form1 : Form
    {

        const int portNo = 8888;
        private TcpClient _client;
        byte[] data;

}

    private void Form1_Load(object sender, EventArgs e)
        {
            //设置本机IP及端口号
            this._client = new TcpClient();
            this._client.Connect("127.0.0.1", portNo);
            data = new byte[this._client.ReceiveBufferSize];

      }

  public void SendMessage(string message)//发送数据
        {
            try
            {
                NetworkStream ns = this._client.GetStream();
                byte[] data = System.Text.Encoding.ASCII.GetBytes(message);//将要发送的数据转化为字节流,然后发送数据
                ns.Write(data, 0, data.Length);
                ns.Flush();
            }
            catch (Exception ex)
            {
                //MessageBox.Show(ex.ToString());
            }
        }


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值