I'm new to exciting world of Unity, and I have problem establishing network connection using NetworkTransport API.
I'm using NodeJS as server. And I have some questions.
- Does NetworkTransport.Connect method awaits some response message from server?
- What is the encoding and message signature of Connect, Disconnect, Send and Receive methods?
My client's code so far:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Networking;
public class Network : MonoBehaviour {
private int unreliableChannel;
private ConnectionConfig config;
private HostTopology topology;
private int hostId;
private int connectionId;
private byte error;
void Start () {
NetworkTransport.Init();
config = new ConnectionConfig();
unreliableChannel = config.AddChannel(QosType.Unreliable);
topology = new HostTopology(config, 1);
hostId = NetworkTransport.AddHost(topology, 4444);
connectionId = NetworkTransport.Connect(hostId, "127.0.0.1", 3051, 0, out error);
Debug.Log(connectionId);
}
void Update () {
int recHostId;
int connectionId;
int channelId;
byte[] recBuffer = new byte[1024];
int bufferSize = 1024;
int dataSize;
byte error;
NetworkEventType recData = NetworkTransport.Receive(out recHostId, out connectionId, out channelId, recBuffer, bufferSize, out dataSize, out error);
switch (recData)
{
case NetworkEventType.Nothing:
break;
case NetworkEventType.ConnectEvent:
break;
case NetworkEventType.DataEvent:
Debug.Log("Message: " + System.Text.Encoding.Unicode.GetString( recBuffer, 0, dataSize ) );
break;
case NetworkEventType.DisconnectEvent:
break;
}
}
}
Server part looks like this
const dgram = require( 'dgram' );
const server = dgram.createSocket( 'udp4' );
server.on( 'listening', () => {
let address = server.address();
console.log( 'UDP Server listening on ' + address.address + ":" + address.port );
});
server.on( 'message', function ( message, remote ) {
console.log( remote.address + ':' + remote.port +' - ' + message.toLocaleString('utf8') );
server.send(Buffer.from('hello'), remote.port, remote.address, function ( err, bytes ) {
if ( err ) {
throw err;
}
console.log( `${bytes} bytes sent` );
});
});
server.bind( 3051, '127.0.0.1' );
Problem is that on server I receive message that I can't decode it. (some strange binary symbols remain). Also, when I'm sending something to client, NetworkTransport.Receive() receives nothing. Thank you.