首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >python服务器与C#客户端之间的通信(统一)

python服务器与C#客户端之间的通信(统一)
EN

Stack Overflow用户
提问于 2021-05-28 00:22:01
回答 2查看 374关注 0票数 0

在下面您可以看到python服务器和C#客户端脚本,流程是发送和接收数据包。

我通过云连接到服务器,使用Putty连接到服务器,客户机是使用UnityandC#脚本创建的应用程序。

server.py

代码语言:javascript
复制
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库。

代码语言:javascript
复制
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);
    }
}

这里的问题是,我无法从服务器接收数据,对客户机来说是一样的,我不能从客户端接收数据,而且我也不知道我的消息是否发送了,但是,在服务器控制台中,由于服务器脚本中的这两行代码,我收到了来自客户机的连接:

代码语言:javascript
复制
client, adr = s.accept()
print(f"Got connection from ",adr)

其结果来自于(‘193.168.1.255,3112)。

以下是服务器端的完整输出:

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

我努力解决了这个问题,但还没有结果,如果有人能帮我,我会很感激的。

EN

回答 2

Stack Overflow用户

发布于 2021-05-28 06:48:39

我认为问题在于您的using块。它将在Dispose方法完成后(或者实际上在using块到达结束时)立即对Start进行处理。

我觉得你宁愿做这样的事

代码语言:javascript
复制
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();
}
票数 0
EN

Stack Overflow用户

发布于 2022-11-21 13:47:25

我认为这个问题已不再重要,但我仍会尽量回答。这都是关于HTTP协议的。在我看来,您正在尝试连接到您的服务器就像一个网站,但为此,您需要发送一个正确的响应,以便客户端可以看到它。您可以在这里阅读更多详细信息,-> https://developer.mozilla.org/en-US/docs/Web/HTTP/Overview#responses

简而言之,您需要发送如下的回复:

代码语言:javascript
复制
HTTP/1.1 200 OK
Content Length: 11

Hello World

或者是蟒蛇

代码语言:javascript
复制
client.send(b'HTTP/1.1 200 OK\nContent-Length: 11\n\nHello World')

如果您希望通过HTTP协议实现通信,并且您的服务器将以HTML或JSON格式发送响应,这也适用于这种情况。

我希望我能帮你澄清这种情况。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67731405

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档