在下面您可以看到python服务器和C#客户端脚本,流程是发送和接收数据包。
我通过云连接到服务器,使用Putty连接到服务器,客户机是使用UnityandC#脚本创建的应用程序。
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)其结果来自于(‘193.168.1.255,3112)。
以下是服务器端的完整输出:

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

我努力解决了这个问题,但还没有结果,如果有人能帮我,我会很感激的。
发布于 2021-05-28 06:48:39
我认为问题在于您的using块。它将在Dispose方法完成后(或者实际上在using块到达结束时)立即对Start进行处理。
我觉得你宁愿做这样的事
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();
}发布于 2022-11-21 13:47:25
我认为这个问题已不再重要,但我仍会尽量回答。这都是关于HTTP协议的。在我看来,您正在尝试连接到您的服务器就像一个网站,但为此,您需要发送一个正确的响应,以便客户端可以看到它。您可以在这里阅读更多详细信息,-> https://developer.mozilla.org/en-US/docs/Web/HTTP/Overview#responses。
简而言之,您需要发送如下的回复:
HTTP/1.1 200 OK
Content Length: 11
Hello World或者是蟒蛇
client.send(b'HTTP/1.1 200 OK\nContent-Length: 11\n\nHello World')如果您希望通过HTTP协议实现通信,并且您的服务器将以HTML或JSON格式发送响应,这也适用于这种情况。
我希望我能帮你澄清这种情况。
https://stackoverflow.com/questions/67731405
复制相似问题