【问题标题】:Communication between a python server and a C# client (Unity)python服务器和C#客户端之间的通信(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)

这是服务器端的完整输出:

这是我从网络浏览器收到的信息:

我努力解决了这个问题,但还没有结果,如果有人可以帮助我,我将不胜感激。

【问题讨论】:

    标签: python c# unity3d websocket


    【解决方案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 是的,我认为您在套接字有机会接收任何东西之前就将其丢弃
    • 我尝试了你的解决方案,但同样的问题,让我给你看看服务器的输出,我会编辑我的问题
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-21
    • 2012-11-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多