У меня просто возникла проблема на моем Mac, пытающемся отправить строки через веб-сокеты, используя этот https://www.assetstore.unity3d.com/en/#!/content/38367
Много адаптированного кода ниже отсюда, в основном http://www.codepool.biz/how-to-implement-a-java-websocket-server-for-image-transmission-with-jetty.html и веб-сокет Sharp echotest пример.
Я могу подключиться, но в окне консоли моего сервера Jetty нет никаких признаков строк (на сервере ws, работающем в java (eclipse)).
Я в основном просто пытаюсь отправить «1» на свой сервер через соединение через веб-сокет с редактором единства (5) на данный момент, чтобы побудить сервер начать отправлять файлы PNG, закодированные как массивы байтов, поэтому я могу вернуть их обратно вместе в сценарии C# и применить их к текстуре.
это скрипт, я хочу прикрепить его к игровому объекту, такому как самолет или куб, и отображать обновляемые изображения, отправленные через веб-сокет с моего сервера Jetty, но на данный момент я просто застрял, пытаясь отправить сообщение и посмотрите, как он появляется в моем окне консоли eclipse.
using UnityEngine;
using System.Collections;
using System;
public class socketTexture : MonoBehaviour {
// Use this for initialization
IEnumerator Start () {
WebSocket w = new WebSocket(new Uri("ws://192.168.0.149:8080/"));
yield return StartCoroutine(w.Connect());
Debug.Log ("Connected");
w.SendString("I'm client");
w.SendString("1");
while (true)
{
byte[] reply = w.Recv();
if (reply != null)
{
Debug.Log ("Received: "+reply);
var tex = new Texture2D(300, 300, TextureFormat.PVRTC_RGBA4, false);
// Load data into the texture and upload it to the GPU.
tex.LoadRawTextureData(reply);
tex.Apply();
// Assign texture to renderer's material.
GetComponent<Renderer>().material.mainTexture = tex;
}
if (w.Error != null)
{
Debug.LogError ("Error: "+w.Error);
break;
}
yield return 0;
}
w.Close();
}
}
... И соответствующий код с сервера причала, но это работает, я протестировал его с некоторым javascript, и я могу загрузить PNG обратно в окно браузера, так что я определенно делаю что-то не так в Unity.
@OnWebSocketMessage //part request from websocket client (remote browser)
public void onMessage( String message) {
System.out.println("message");
if (message.equals("1") || message.equals("2") || message.equals("3") || message.equals("4") ) {
System.out.println("Part " + message + " joined");
System.out.println( UIMain.usersPath + "/" + message + ".png" );
final String testVar = ( UIMain.usersPath + "/" + message + ".png" );
task = new FileWatcher( new File(testVar) ) {
protected void onChange( File file ) {
// here we code the action on a change
System.out.println( "File "+ file.getName() +" has changed!" );
try {
File f = new File(testVar);
BufferedImage bi = ImageIO.read(f);
ByteArrayOutputStream out = new ByteArrayOutputStream();
ImageIO.write(bi, "png", out);
ByteBuffer byteBuffer = ByteBuffer.wrap(out.toByteArray());
mSession.getRemote().sendBytes(byteBuffer);
out.close();
byteBuffer.clear();
}
catch (IOException e) {
e.printStackTrace();
}
}
};
Timer timer1 = new Timer(); {
timer1.schedule(task , new Date(), 40 );
}
}
else if (message.equals( "0")) {
zerocounter = zerocounter + 1;
if (zerocounter >= 2) {
task.cancel();
}
}
else if (message.equals( "Hi there, client here")) {
System.out.println( "Client says: " + message );
}
}
Любая помощь будет очень признательна, я скрывался здесь много лет, надеюсь, скоро выйду на сцену, где я тоже смогу немного помочь другим. Бенедикт
Изменить: это сообщение об ошибке моей консоли в Unity
FormatException: недопустимая длина. System.Convert.FromBase64String (System.String s) (в /Users/builduser/buildslave/mono-runtime-and-classlibs/build/mcs/class/corlib/System/Convert.cs:146) EchoTest+c__Iterator0.MoveNext ( ) (в активах/примере/EchoTest.cs:11)
Я почти уверен, что проблема возникает из-за острого веб-сокета для webgl. Мне нужно отправить сообщение в виде массива байтов.
@OnWebSocketConnect
и убедитесь, что эта конечная точка вообще используется. Ваша реализация@OnWebSocketConnect
может даже отправить сообщение TEXT/BINARY вашему клиенту. Если это даже не показывает активность, то вы даже не подключены к этой конечной точке WebSocket. - person Joakim Erdfelt   schedule 09.12.2015Server
. Реализация codepool.biz до смешного проста, без контекстов, 1 обработчик, без поддержки http, очень негибкое использование. Если вы что-то измените, вам придется переосмыслить настройкуServer
и то, как вы подключаетесь. - person Joakim Erdfelt   schedule 09.12.2015