python服务器和C#客户端之间的通信(Unity)
Posted
技术标签:
【中文标题】python服务器和C#客户端之间的通信(Unity)【英文标题】:Communication between a python server and a C# client (Unity) 【发布时间】:2021-05-28 00:22:01 【问题描述】:下面你可以看到python服务器和C#客户端脚本,过程是发送和接收数据包。
我通过云连接到服务器,使用Putty连接它,客户端是使用Unity和C#脚本创建的应用程序。
server.py:
import socket
port = 80
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
host = socket.gethostname()
s.bind((host, port))
s.listen(5)
print("server listening...")
while True:
client, adr = s.accept()
print(f"got connection from ",adr)
client.send(bytes("welcome from the server","utf-8"))
data = client.recv(1024)
print("server received", data.decode("utf-8"))
client.close()
client.cs:我在这里使用 WebSocketSharp 库。
public class client: MonoBehaviour
byte[] buffer = Encoding.UTF8.GetBytes("Hello I'm the client");
void Start()
using (WebSocket ws = new WebSocket("ws://arb-server.tunis-plm.com/"))
ws.Connect();
ws.Send(buffer);
ws.OnMessage += Ws_OnMessage;
private void Ws_OnMessage(object sender, MessageEventArgs e)
Debug.Log(e.Data);
这里的问题是我无法从服务器接收数据,对于客户端也是如此,我无法从客户端接收数据,也不知道我的消息是否发送,但是,在服务器控制台 我收到了来自客户端的连接,这要归功于服务器脚本中的这两行代码:
client, adr = s.accept()
print(f"Got connection from ",adr)
所以结果是 Got connection from ('193.168.1.255',3112)。
这是服务器端的完整输出:
这是我从网络浏览器收到的信息:
我努力解决了这个问题,但还没有结果,如果有人可以帮助我,我将不胜感激。
【问题讨论】:
【参考方案1】:我认为问题在于您的 using
块。只要Start
方法完成(或者实际上只要using
块到达末尾),它就会Dispose
ws
。
我认为你宁愿做类似的事情
private WebSocket ws;
private void Start ()
ws = new WebSocket("ws://arb-server.tunis-plm.com/"))
// In general I would move this up
// what if you already receive a message right when connected
// but before your code had time to add the callback
ws.OnMessage += Ws_OnMessage;
ws.Connect();
ws.Send(buffer);
private void OnDestroy()
ws?.Dispose();
【讨论】:
所以你认为问题出在using
?
@Sekmani52 是的,我认为您在套接字有机会接收任何东西之前就将其丢弃
我尝试了你的解决方案,但同样的问题,让我给你看看服务器的输出,我会编辑我的问题以上是关于python服务器和C#客户端之间的通信(Unity)的主要内容,如果未能解决你的问题,请参考以下文章
使用 Visual Studio 2010 在 C# 中的两台不同机器上运行的客户端和服务器之间的通信