所以昨天我在一个树莓派上和Unity对话( Pi上的Python 2.7,Unity 2017),然后记忆卡出了故障,我不得不重新构建一个。新安装的是Python3.5和之前相同的Unity。我想我写的代码大致是一样的,虽然在排除故障的时候有了一些改变(打印语句改变了,等等3.5版)。无论哪种方式,我在Unity端都会收到一个错误,说连接方在一段时间后没有正确响应。我已经从PC和其他计算机Pi了IP和套接字,它是可以访问的,但只有Unity应用程序不能与Pi Server通信。有人能看到我在代码中哪里搞砸了吗?PC上的防火墙已禁用,并且Pi的IP/端口地址正确。
Raspberry Pi上的Python
import socket
import sys
backlog = 1
size = 1024
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind(('192.168.3.232', 12345))
s.listen(1)
while True:
print ('waiting for a connection')
connection, client_address = s.accept()
try:
print ('connection from', client_address)
while True:
data = connection.recv(16)
print ('received "%s"' % data)
if data:
print ('sending data back to the client')
connection.sendall(data)
else:
print ('no more data from', client_address)
break
finally:
print("closing socket")
cient.close()
s.close()
统一上的C#
using UnityEngine;
using System.Collections;
using System;
using System.IO;
using System.Net.Sockets;
public class ClientSocket : MonoBehaviour {
bool socketReady = false;
TcpClient mySocket;
public NetworkStream theStream;
StreamWriter theWriter;
StreamReader theReader;
public String Host = "192.168.3.232";
public Int32 Port = 12345;
void Start() {
setupSocket ();
}
public void setupSocket() { // Socket setup here
try {
mySocket = new TcpClient(Host, Port);
theStream = mySocket.GetStream();
theWriter = new StreamWriter(theStream);
theReader = new StreamReader(theStream);
socketReady = true;
}
catch (Exception e) {
Debug.Log("Socket error:" + e); // catch any exceptions
}
}
来自统一控制台的错误: Socket error:System.Net.Sockets.SocketException:连接尝试失败,因为连接方在一段时间后没有正确响应,或者建立的连接失败,因为连接的主机没有响应。
发布于 2018-06-12 22:24:11
Raspberry Pi上的防火墙可能还在运行。检查您的iptables。如果您在Raspberry Pi上用python编写了一个小型套接字测试应用程序,则可以对此进行测试。
发布于 2018-10-09 21:23:25
@ Colin。我将你的Python代码复制并粘贴到我的Raspberry Pi上运行的Python2.7.9中,以及我PC上运行的Unity中的客户端套接字中,它工作得很好。只需更改IP地址,一切工作正常。我知道这是一个迟来的回复,但它可能会对其他人有所帮助。
https://stackoverflow.com/questions/50818491
复制相似问题