- Home /
Sending and recieving a packet of bytes through a UDP connection
So the idea was to have this script in two separate builds of Unity and have one set as client and the other set as not a client.
using System.Collections;
using System.Collections.Generic;
using System.Net;
using System;
using System.Net.Sockets;
using System.Text;
using UnityEngine;
public class NetworkHandler : MonoBehaviour
{
public int serverPort = 00000;
public string IPString = "11111";
IPAddress serverIP;
IPEndPoint serverEP;
UdpClient client;
UdpClient server;
public bool isClient = true;
public bool startRecieving = false;
public GameObject hammer;
public ClientController remoteClient;
private void Update()
{
if (Input.GetKeyDown("y"))
{
startRecieving = !startRecieving;
}
if (Input.GetKeyDown("j") && isClient == true)
{
SendData("jump");
}
if (isClient == false && startRecieving == true)
{
RecieveData();
}
}
private void Start()
{
remoteClient = hammer.GetComponent<ClientController>();
serverIP = IPAddress.Parse(IPString);
serverEP = new IPEndPoint(serverIP, serverPort);
}
public void RecieveData()
{
//Decided to use try catch so that way if there is no data being recieved it wont throw an exception
try
{
Byte[] receivedBytes = client.Receive(ref serverEP);
string returnData = Encoding.ASCII.GetString(receivedBytes);
print(returnData);
if (returnData == "jump")
{
remoteClient.Jump(100);
}
}
catch (NullReferenceException)
{
}
catch(ObjectDisposedException)
{
}
finally
{
client.Close();
}
}
public void SendData(string text)
{
client = new UdpClient(serverPort);
client.Connect(serverIP, serverPort);
Byte[] sendBytes = Encoding.ASCII.GetBytes(text);
client.Send(sendBytes, sendBytes.Length);
}
}
When the non client would receive the data it would determine whether to jump or not, but instead nothing happens, unless I disable isClient then it works inside of the same build or inside of the editor, I'm trying to avoid using Unet because of it changing soon, the 0's and 1's are where I put the forwarded port and my local ip address. Heres the other script that handles the "jump"
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class ClientController : MonoBehaviour
{
public Rigidbody thisBody;
void Awake()
{
if (GetComponent<Rigidbody>() != null)
{
thisBody = this.GetComponent<Rigidbody>();
}
}
public void Jump(int force)
{
thisBody.AddForce(Vector3.up * force);
}
}
I'm just asking for a little guidance because I've never tried networking before really, and I'm probably missing something really simple.
Answer by Captaion · Sep 06, 2019 at 06:48 PM
So I figured it out for the most part I think bought a book did a bunch of documentation reading and even backtracking from unity into a simple console application and I found my answer out and posted it over here On My other question that I answered
Basically what I was doing was completely wrong. the host only needs to define its forwarded port and the client should not connect to the socket it should just send otherwise its gonna close it off, and if you're testing it on one machine its gonna start yelling about it.