我正在开发一个非常简单/基本的客户端-服务器网络程序,这是我希望创建的未来游戏的基础。现在客户端程序/项目确实与“服务器程序/项目”成功连接(两者完全分开)。但是,当涉及到让客户端向服务器发送请求/命令时。好吧,它不会将命令发送到服务器,而是在客户端上执行。
我读到有关将“Monodevelop”继承更改为“NetworkBehaviour”的信息,所以我这样做了,它导致了以下错误;
Command xxx was sent to the server
...Debug.logerror(object
所以我似乎已经完成了一半,据称它向服务器发送了命令,但服务器没有做任何事情。我不知道为什么。
以下是我为我的服务器和客户端准备的相对较短的程序,它们几乎相同,但如果有人能帮助我,我将不胜感激,因为我的大学课程并没有真正涉及网络编程很多;
服务器代码
using UnityEngine;
using UnityEngine.Networking;
using System.Collections;
public class server : MonoBehaviour
{
public string IP = "127.0.0.1";
public int port = 25001;
public int prevConns = 0;
private int currConns = 0;
public virtual void OnServerReady (NetworkConnection conn)
{
NetworkServer.SetClientReady (conn);
}
void OnGUI ()
{
if (Network.peerType == NetworkPeerType.Disconnected) {
if (GUI.Button (new Rect (100, 100, 100, 25), "Start Client")) {
Network.Connect (IP, port);
}
if (GUI.Button (new Rect (100, 125, 100, 25), "Start Server")) {
Network.InitializeServer (20, port, false);
}
} else {
//CLIENT - NOT NEEDED
if (Network.peerType == NetworkPeerType.Client) {
GUI.Label (new Rect (100, 100, 100, 25), "Client");
if (GUI.Button (new Rect (100, 125, 100, 25), "Disconnect")) {
Network.Disconnect (250);
}
}
if (Network.peerType == NetworkPeerType.Server) {
currConns = Network.connections.Length;
GUI.Label (new Rect (100, 100, 100, 25), "Server");
GUI.Label (new Rect (100, 125, 100, 25), "Connections: " + currConns);
if (prevConns != currConns) {
if (prevConns < currConns) {
Debug.Log ("NEW CONNECTION");
prevConns++;
} else if (prevConns > currConns) {
Debug.Log ("Lost CONNECTION");
prevConns--;
}
}
if (GUI.Button (new Rect (100, 15, 100, 25), "Shutdown")) {
Network.Disconnect (250);
}
}
}
}
}
客户代码
using UnityEngine;
using UnityEngine.Networking;
using System.Collections;
public class connection : MonoBehaviour
{
public string IP = "127.0.0.1";
public int port = 25001;
public GameObject player;
public virtual void OnClientConnect (NetworkConnection conn)
{
ClientScene.Ready (conn);
}
void OnGUI ()
{
if (Network.peerType == NetworkPeerType.Disconnected) {
if (GUI.Button (new Rect (100, 100, 100, 25), "Start Client")) {
Network.Connect (IP, port);
}
} else {
if (Network.peerType == NetworkPeerType.Client) {
GUI.Label (new Rect (100, 100, 100, 25), "Client");
if (GUI.Button (new Rect (100, 125, 100, 25), "Disconnect")) {
Network.Disconnect (250);
}
if (GUI.Button (new Rect (100, 150, 100, 25), "Send Cmd")) {
CmdSendCommand ();
}
}
}
}
[Command]
void CmdSendCommand ()
{
NetworkBehaviour.print ("HELLO");
}
}