Custom dedicated server application

Hello,

I’m looking to learn to create a dedicated server application. For example, a “cmd.exe” window where I can start the server, see if there is client connected, send a message to client…

Something like that : Unity5 - Dedicated Authoritative Server, Physics & Network (test) - YouTube

I saw fews topics of people trying to do something like that, but all the answers said “Use Photon”.
I don’t want something in the cloud…

My goal is to create a small game where player can connect to a server, spawn, shoot, die and leave.
The server can be host by anyone, but i repeat, I want to learn how to make a standalone server.

If someone have anything that can help me, It will be very nice to give me.

Thanks

A standalone server for Unet is in the road map for Unity. If you don’t want to wait, you can create a simple version of it yourself. The network manager has the option to only host a server, and you can build functionality from there. (if server host, create player list and chat, etc)

Another option would be to directly use TCP or UDP connectionis to do networking. Its rather simple and much more flexible then UNET.

UDP: c# - Sending and Receiving UDP packets - Stack Overflow

TCP: c# - Sending and receiving data over a network using TcpClient - Stack Overflow

Good luck

I made a small “server”, where I can get a Transform position :

I found scripts on http://www.java2s.com/Code/CSharp/Network

First, I made with a Visual Studio Console C# application.

/*
C# Network Programming 
by Richard Blum

Publisher: Sybex 
ISBN: 0782141765
*/
using System;
using System.Net;
using System.Net.Sockets;
using System.Text;

public class SimpleUdpSrvr
{
    public static void Main()
    {
        int recv;
        byte[] data = new byte[1024];
        IPEndPoint ipep = new IPEndPoint(IPAddress.Any, 9050);

        Socket newsock = new Socket(AddressFamily.InterNetwork,
                        SocketType.Dgram, ProtocolType.Udp);

        newsock.Bind(ipep);
        Console.WriteLine("Waiting for a client...");

        IPEndPoint sender = new IPEndPoint(IPAddress.Any, 0);
        EndPoint Remote = (EndPoint)(sender);

        recv = newsock.ReceiveFrom(data, ref Remote);

        Console.WriteLine("Message received from {0}:", Remote.ToString());
        Console.WriteLine(Encoding.ASCII.GetString(data, 0, recv));

        string welcome = "Welcome to my test server";
        data = Encoding.ASCII.GetBytes(welcome);
        newsock.SendTo(data, data.Length, SocketFlags.None, Remote);
        while (true)
        {
            data = new byte[1024];
            recv = newsock.ReceiveFrom(data, ref Remote);

            Console.WriteLine(Encoding.ASCII.GetString(data, 0, recv));
            newsock.SendTo(data, recv, SocketFlags.None, Remote);
        }
    }
}

Second, I made with Unity a game object Called UDPClient with this script attached :

using UnityEngine;
using UnityEngine.Networking;
using System;
using System.Net;
using System.Net.Sockets;
using System.Text;

public class UDPClient : NetworkBehaviour
{

	public Transform Cube;

	void Start()
	{
		print (Cube.position);
		byte[] data = new byte[1024];
		IPEndPoint ipep = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 9050);

		Socket server = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);

		string welcome = "Hello, what's up?";
		data = Encoding.ASCII.GetBytes(welcome);
		server.SendTo(data, data.Length, SocketFlags.None, ipep);

		IPEndPoint sender = new IPEndPoint(IPAddress.Any, 0);
		EndPoint tmpRemote = (EndPoint)sender;

		data = new byte[1024];
		int recv = server.ReceiveFrom(data, ref tmpRemote);

		Debug.Log (String.Format("Message received from {0}:", tmpRemote.ToString()));
		Debug.Log (String.Format(Encoding.ASCII.GetString(data, 0, recv)));

		server.SendTo(Encoding.ASCII.GetBytes(Cube.position.ToString()), tmpRemote);


		Console.WriteLine("Stopping client");
		server.Close();

	}
}

This is a small modification of the original script.

And this is the result !

This is not amazing, but this is a start !

I’ve added a Username string that is transmitted along with the Vector3, and I’ve set up a list of accepted Usernames. How would I disconnect players that don’t have a Username that is on the list?