我想利用socket把python的数据传输到unity中,请给我推荐具体的教程
时间: 2023-05-28 14:04:25 浏览: 107
以下是一个简单的示例,可以通过socket将Python数据传输到Unity中。
Python端:
```
import socket
import json
# 创建socket对象
s = socket.socket()
# 获取本地主机名
host = socket.gethostname()
# 设置端口号
port = 12345
# 绑定端口号
s.bind((host, port))
# 等待客户端连接
s.listen(5)
while True:
# 建立客户端连接
c, addr = s.accept()
print('连接地址:', addr)
# 发送数据
data = {"x": 1, "y": 2, "z": 3}
c.sendall(json.dumps(data).encode())
# 关闭连接
c.close()
```
Unity端:
```
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System.Net.Sockets;
using System.Text;
using System.Threading;
public class SocketClient : MonoBehaviour
{
private TcpClient client;
private Thread clientThread;
// Start is called before the first frame update
void Start()
{
client = new TcpClient("127.0.0.1", 12345);
clientThread = new Thread(new ThreadStart(ReceiveData));
clientThread.Start();
}
// Update is called once per frame
void Update()
{
}
private void ReceiveData()
{
while (true)
{
if (client.Connected)
{
NetworkStream ns = client.GetStream();
byte[] data = new byte[1024];
int recv = ns.Read(data, 0, data.Length);
string jsonData = Encoding.ASCII.GetString(data, 0, recv);
Debug.Log("Received data: " + jsonData);
}
else
{
Thread.Sleep(500);
}
}
}
private void OnApplicationQuit()
{
if (clientThread != null)
{
clientThread.Abort();
}
if (client != null)
{
client.Close();
}
}
}
```
上述Python代码创建了一个socket对象,并通过bind()方法绑定了本地主机和端口号。然后在一个无限循环中等待客户端连接。当客户端连接成功后,将要发送的数据转换成json格式,并通过sendall()方法发送给客户端。最后关闭连接。
Unity代码创建了一个TcpClient对象,并连接到Python服务器。然后开启一个线程用于接收数据。在接收数据时,先判断是否连接成功,然后通过GetStream()方法获取NetworkStream对象,并通过Read()方法读取接收到的数据。最后将接收到的数据转换成字符串并输出。在应用程序退出时,关闭线程和TcpClient对象。
这只是一个简单的示例,你可以根据实际需求进行修改和扩展。
阅读全文