gpt4 book ai didi

java - WebSocket 服务器 (Java) 无法读取但发送到 C# (Unity) 客户端

转载 作者:可可西里 更新时间:2023-11-01 16:59:49 25 4
gpt4 key购买 nike

对于大学项目,我们应该构建一个多人游戏。因为我在 Unity 方面有很多经验,所以我想将它用作游戏引擎。我们必须使用 WebSockets 进行通信,并使用 json 作为协议(protocol)来传输数据。

到目前为止一切顺利。 C# 没有默认的 websocket 实现,因此我为此使用了一个名为 websocket-sharp 的库 ( https://github.com/sta/websocket-sharp )。

我在客户端(Unity)端的代码如下:

    public class EchoTest : MonoBehaviour {

public GameObject master;
public string serveradress = "ws://";

private WebSocket w = null;

// Use this for initialization
IEnumerator Start () {
w = new WebSocket(new Uri(serveradress));
yield return StartCoroutine(w.Connect());

w.SendString ("Hello World from client");
//w.SendString("Hi there");
int i=0;
while (true)
{
string reply = w.RecvString();
if (reply != null)
{
master.GetComponent<Networker> ().onNetworkMessage (reply);
//Debug.Log ("Received: "+reply);
//w.SendString("Hi there"+reply);
}
if (w.error != null)
{
Debug.LogError ("Error: "+w.error);
break;
}
w.SendString("helloworld");
yield return 0;
}
w.Close();
}

public void sendString(string message){
sendRaw(Encoding.UTF8.GetBytes (message));
}

public void sendRaw(byte[] send){
w.Send (send);
}
}

我尝试使用托管回显服务器 ( http://demos.kaazing.com/echo/ ) 的在线服务实现我的实现,一切正常。

我用 Java 编写了一个基本的回显服务器,并使用浏览器插件 (https://chrome.google.com/webstore/detail/simple-websocket-client/pfdhoblngboilpfeibdedpjgfnlcodoo) 和上面的回显服务器网站检查了服务器。两者都很有魅力。

来自 Java 服务器的代码(在 Tomcat 9 中运行):

@ServerEndpoint(value = "/echo")
public class WSEchoS {


private static final Logger LOGGER =
Logger.getLogger(WSEchoS.class.getName());

@OnOpen
public void onOpen(Session session) {
LOGGER.log(Level.INFO, "New connection with client: {0}",
session.getId());
try {
session.getBasicRemote().sendText("Hello new Client x");
} catch (IOException e) {
e.printStackTrace();
}
}

@OnMessage
public String onMessage(String message, Session session) {
LOGGER.log(Level.INFO, "New message from Client [{0}]: {1}",
new Object[]{session.getId(), message});
try {
session.getBasicRemote().sendText("This is from the server " + message);
} catch (IOException e) {
e.printStackTrace();
}
return "Server received [" + message + "]";
}

@OnClose
public void onClose(Session session) {
LOGGER.log(Level.INFO, "Close connection for client: {0}",
session.getId());
}

@OnError
public void onError(Throwable exception, Session session) {
LOGGER.log(Level.INFO, "Error for client: {0}", session.getId());
}
}

Nooooowwwww 问题:

Unity客户端无法向服务端发送数据!他可以正常连接并且可以从服务器读取消息,但是他不能发送给他(trigger onmesssage)。找了一整天都没有成功。

客户端与在线服务配合得很好,服务器也一样,但两者都无法正常工作。谁能解释一下?我会为此爱你 <3

问候帕斯卡

最佳答案

一天后我发现了问题。

Websockets 能够处理字符串、byte[] 和更多格式。

我这样发送我的数据:

public void SendString(string str)
{
Send (Encoding.UTF8.GetBytes (str));
}

并使用了底层的 Send(byte[]) 方法。因此,当我将 Java 中的 @OnMessage 方法更改为

@OnMessage
public void processUpload(byte[] bytes, boolean last, Session session) {

一切正常,反过来我可以发送一个字符串,我的服务器也收到我的消息:)

也许对某些人来说了解它很有用

问候帕斯卡

关于java - WebSocket 服务器 (Java) 无法读取但发送到 C# (Unity) 客户端,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47342554/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com