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# 中的两台不同机器上运行的客户端和服务器之间的通信

C# 客户端 Python 服务器:连接被拒绝

C# 和 Python 之间的命名管道

C#和Python之间的进程间通信

使用 IPC 在 Python 和 C# 之间进行通信的最简单方法?

c#命名管道双向通信