# NetworkTables Networking

The advantage of the robot program being the server is that it's at a known network name (and typically at a known address) that is based on the team number. This is why it's possible in both the NetworkTables client API and in most dashboards to simply provide the team number, rather than a server address. As the robot program is the server, note this means the NetworkTables server is running on the local computer when running in simulation.

## Starting a NetworkTables Server

.. tab-set::

    .. tab-item:: Java
        :sync: Java

        ```java
        NetworkTableInstance inst = NetworkTableInstance.getDefault();
        inst.startServer();
        ```

    .. tab-item:: C++
        :sync: C++

        ```c++
        nt::NetworkTableInstance inst = nt::NetworkTableInstance::GetDefault();
        inst.StartServer();
        ```

    .. tab-item:: C++ (Handle-based)
        :sync: C++ (Handle-based)

        ```c++
        NT_Inst inst = nt::GetDefaultInstance();
        nt::StartServer(inst, "networktables.json", "", NT_DEFAULT_PORT3, NT_DEFAULT_PORT4);
        ```

    .. tab-item:: C
        :sync: C

        ```c
        NT_Inst inst = NT_GetDefaultInstance();
        NT_StartServer(inst, "networktables.json", "", NT_DEFAULT_PORT3, NT_DEFAULT_PORT4);
        ```

    .. tab-item:: Python
        :sync: Python


        ```python
        import ntcore
        inst = ntcore.NetworkTableInstance.getDefault()
        inst.startServer()
        ```

## Starting a NetworkTables Client

.. tab-set::

    .. tab-item:: Java
        :sync: Java

        ```java
        NetworkTableInstance inst = NetworkTableInstance.getDefault();
        // start a NT4 client
        inst.startClient4("example client");
        // connect to a roboRIO with team number TEAM
        inst.setServerTeam(TEAM);
        // starting a DS client will try to get the roboRIO address from the DS application
        inst.startDSClient();
        // connect to a specific host/port
        inst.setServer("host", NetworkTableInstance.kDefaultPort4)
        ```

    .. tab-item:: C++
        :sync: C++

        ```c++
        nt::NetworkTableInstance inst = nt::NetworkTableInstance::GetDefault();
        // start a NT4 client
        inst.StartClient4("example client");
        // connect to a roboRIO with team number TEAM
        inst.SetServerTeam(TEAM);
        // starting a DS client will try to get the roboRIO address from the DS application
        inst.StartDSClient();
        // connect to a specific host/port
        inst.SetServer("host", NT_DEFAULT_PORT4)
        ```

    .. tab-item:: C++ (Handle-based)
        :sync: C++ (Handle-based)

        ```c++
        NT_Inst inst = nt::GetDefaultInstance();
        // start a NT4 client
        nt::StartClient4(inst, "example client");
        // connect to a roboRIO with team number TEAM
        nt::SetServerTeam(inst, TEAM);
        // starting a DS client will try to get the roboRIO address from the DS application
        nt::StartDSClient(inst);
        // connect to a specific host/port
        nt::SetServer(inst, "host", NT_DEFAULT_PORT4)
        ```

    .. tab-item:: C
        :sync: C

        ```c
        NT_Inst inst = NT_GetDefaultInstance();
        // start a NT4 client
        NT_StartClient4(inst, "example client");
        // connect to a roboRIO with team number TEAM
        NT_SetServerTeam(inst, TEAM);
        // starting a DS client will try to get the roboRIO address from the DS application
        NT_StartDSClient(inst);
        // connect to a specific host/port
        NT_SetServer(inst, "host", NT_DEFAULT_PORT4)
        ```

    .. tab-item:: Python
        :sync: Python


        ```python
        import ntcore
        inst = ntcore.NetworkTableInstance.getDefault()
        # start a NT4 client
        inst.startClient4("example client")
        # connect to a roboRIO with team number TEAM
        inst.setServerTeam(TEAM)
        # starting a DS client will try to get the roboRIO address from the DS application
        inst.startDSClient()
        # connect to a specific host/port
        inst.setServer("host", ntcore.NetworkTableInstance.kDefaultPort4)
        ```

