【发布时间】:2017-09-16 17:47:22
【问题描述】:
我似乎无法让我的客户端连接到我的服务器。我正在开发一款将在局域网上播放和托管的多人游戏。我正在尝试设置初步步骤以使所有网络传输功能正常运行,但它似乎不起作用。当我将客户端作为独立应用程序运行并在统一编辑器中运行服务器时,当客户端连接到服务器时,我应该在编辑器控制台中看到反馈,
case NetworkEventType.ConnectEvent:
Debug.Log("Player " + connectionId + "has connected.");
OnConnection(connectionId);
但我没有收到任何反馈。我是网络新手,所以我无法追踪哪里出了问题。任何帮助都会很棒!谢谢。
'NetworkServerController.cs'
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Networking;
using System.Text;
public class NetworkServerController : MonoBehaviour {
private const int MAX_CONNECTION = 100;
private int port = 5701;
private int hostID;
private int webHostID;
private int reliableChannel;
private int unreliableChannel;
private int reliableFragChannel;
private int unreliableFragChannel;
private bool isStarted = false;
private byte error;
private void Awake()
{
//NetworkServer.Reset();
}
private void Start()
{
NetworkTransport.Init();
ConnectionConfig cc = new ConnectionConfig();
reliableChannel = cc.AddChannel(QosType.Reliable);
unreliableChannel = cc.AddChannel(QosType.Unreliable);
reliableFragChannel = cc.AddChannel(QosType.ReliableFragmented);
unreliableFragChannel = cc.AddChannel(QosType.UnreliableFragmented);
HostTopology topo = new HostTopology(cc, MAX_CONNECTION);
hostID = NetworkTransport.AddHost(topo, port, null);
webHostID = NetworkTransport.AddWebsocketHost(topo, port, null);
isStarted = true;
}
private void Update()
{
if (!isStarted)
return;
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: //1
break;
case NetworkEventType.ConnectEvent: //2
Debug.Log("Player " + connectionId + "has connected.");
OnConnection(connectionId);
break;
case NetworkEventType.DataEvent: //3
string msg = Encoding.Unicode.GetString(recBuffer, 0, dataSize);
Debug.Log("Player " + connectionId + "has sent : " + msg);
break;
case NetworkEventType.DisconnectEvent: //4
Debug.Log("Player " + connectionId + "has disconnected.");
break;
}
}
private void OnConnection(int cnnID)
{
// Add to list
// When player joins, tell ID
// Request name and send name of all the other players
}
}
'NetworkClientController.cs'
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.Networking;
public class NetworkClientController : MonoBehaviour {
private const int MAX_CONNECTION = 100;
private int port = 5701;
private string IPAddress = "localhost";
private int hostID;
private int webHostID;
private int reliableChannel;
private int unreliableChannel;
private int reliableFragChannel;
private int unreliableFragChannel;
private int connectionID;
private float connectionTime;
private bool isConnected = false;
private bool isStarted = false;
private byte error;
private string playerName;
private void Start()
{
Connect();
}
private void Update()
{
if (!isConnected)
return;
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: //1
break;
case NetworkEventType.ConnectEvent: //2
break;
case NetworkEventType.DataEvent: //3
break;
case NetworkEventType.DisconnectEvent: //4
break;
}
}
public void Connect()
{
NetworkTransport.Init();
ConnectionConfig cc = new ConnectionConfig();
reliableChannel = cc.AddChannel(QosType.Reliable);
unreliableChannel = cc.AddChannel(QosType.Unreliable);
reliableFragChannel = cc.AddChannel(QosType.ReliableFragmented);
unreliableFragChannel = cc.AddChannel(QosType.UnreliableFragmented);
HostTopology topo = new HostTopology(cc, MAX_CONNECTION);
hostID = NetworkTransport.AddHost(topo, port, null);
connectionID = NetworkTransport.Connect(hostID, IPAddress, port, 0, out error);
connectionTime = Time.time;
isConnected = true;
}
}
【问题讨论】:
-
如果您将 IP 地址从“localhost”更改为您的实际 IP 地址会怎样?
-
@Programmer 好像没什么区别,还是没有收到反馈。
标签: c# unity3d networking