- Home /
Try Catch not executing.
I'm trying to use a try catch statement but the catch portion is not executing. Does the try catch argument get called with unity?
my code:
try{
connectionTestResult = Network.TestConnection();
}
catch (Exception) {
Debug.Log("Internet is not available.");
}
My error code from the console:
Cannot resolve connection tester address, you must be connected to the internet before performing this or set the address to something accessible to you. UnityEngine.Network:TestConnection() Servertesting:TestConnection() (at Assets/2d/Scripts/Servertesting.js:37) Servertesting:OnGUI() (at Assets/2d/Scripts/Servertesting.js:30)
What I'm trying to accomplish: Here
Full code I'm working on:
var testStatus = "Testing network connection capabilities.";
var testMessage = "Test in progress";
var shouldEnableNatMessage : String = "";
var doneTesting = false;
var probingPublicIP = false;
var serverPort = 9999;
var connectionTestResult = ConnectionTesterStatus.Undetermined;
var timeTaken : float = 0.0F;
var maxTime : float = 5.0F;
var internetconnection : boolean = true;
// Indicates if the useNat parameter be enabled when starting a server
var useNat = false;
function OnGUI() {
GUILayout.Label("Current Status: " + testStatus);
GUILayout.Label("Test result : " + testMessage);
GUILayout.Label(shouldEnableNatMessage);
if (!doneTesting)
TestConnection();
}
function TestConnection() {
// Start/Poll the connection test, report the results in a label and
// react to the results accordingly
try{
connectionTestResult = Network.TestConnection();
}catch (Exception) {
Debug.Log("Internet is not available.");
internetconnection = false;
doneTesting = true;
}
if (internetconnection) {
Debug.Log("Internet Connection Available.");
}
if (internetconnection) {
if (timeTaken < maxTime) {
timeTaken += Time.deltaTime;
}
else {
doneTesting = true;
return;
}
switch (connectionTestResult) {
case ConnectionTesterStatus.Error:
testMessage = "Problem determining NAT capabilities";
doneTesting = true;
break;
case ConnectionTesterStatus.Undetermined:
testMessage = "Undetermined NAT capabilities";
doneTesting = false;
break;
case ConnectionTesterStatus.PublicIPIsConnectable:
testMessage = "Directly connectable public IP address.";
useNat = false;
doneTesting = true;
break;
// This case is a bit special as we now need to check if we can
// circumvent the blocking by using NAT punchthrough
case ConnectionTesterStatus.PublicIPPortBlocked:
testMessage = "Non-connectable public IP address (port " +
serverPort +" blocked), running a server is impossible.";
useNat = false;
// If no NAT punchthrough test has been performed on this public
// IP, force a test
if (!probingPublicIP) {
connectionTestResult = Network.TestConnectionNAT();
probingPublicIP = true;
testStatus = "Testing if blocked public IP can be circumvented";
timer = Time.time + 10;
}
// NAT punchthrough test was performed but we still get blocked
else if (Time.time > timer) {
probingPublicIP = false; // reset
useNat = true;
doneTesting = true;
}
break;
case ConnectionTesterStatus.PublicIPNoServerStarted:
testMessage = "Public IP address but server not initialized, "+
"it must be started to check server accessibility. Restart "+
"connection test when ready.";
break;
case ConnectionTesterStatus.LimitedNATPunchthroughPortRestricted:
testMessage = "Limited NAT punchthrough capabilities. Cannot "+
"connect to all types of NAT servers. Running a server "+
"is ill advised as not everyone can connect.";
useNat = true;
doneTesting = true;
break;
case ConnectionTesterStatus.LimitedNATPunchthroughSymmetric:
testMessage = "Limited NAT punchthrough capabilities. Cannot "+
"connect to all types of NAT servers. Running a server "+
"is ill advised as not everyone can connect.";
useNat = true;
doneTesting = true;
break;
case ConnectionTesterStatus.NATpunchthroughAddressRestrictedCone:
case ConnectionTesterStatus.NATpunchthroughFullCone:
testMessage = "NAT punchthrough capable. Can connect to all "+
"servers and receive connections from all clients. Enabling "+
"NAT punchthrough functionality.";
useNat = true;
doneTesting = true;
break;
default:
testMessage = "Error in test routine, got " + connectionTestResult;
}
if (doneTesting) {
if (useNat)
shouldEnableNatMessage = "When starting a server the NAT "+
"punchthrough feature should be enabled (useNat parameter)";
else
shouldEnableNatMessage = "NAT punchthrough not needed";
testStatus = "Done testing";
}
}
}
Did you edit the question and change the question? Seems like the current answers no longer apply.
It also looks like it didn't throw an exception
@perchik originally the question read "... catch(UnityEngine){..." and it looks like Network.TestConnection(); might throw some kind of exception, but I don't know of any off hand, and even if it does I would expect more to be in the try block
The question has not really changed... I'm getting some kind of error from Network.TestConnection() when I attempt it without a active internet connection. However, it is not executing the catch portion of the code.
Answer by gardian06 · Sep 13, 2013 at 08:29 PM
if you are going to give arguments to catch then they either have to be extensions of the exception class, or already exist in System.Exception.
if you want the catch block to execute of a specific type of exception then you either need to define it, or use one that is defined, but that exception will still need to be thrown (either by the system, or by you ( throw MyException();)
if you want the catch block to execute on any exception then give catch no arguments
try{
}catch{
}
Gives sintax errors... $$anonymous$$onoDevelop won't accept it.
Answer by flaviusxvii · Sep 13, 2013 at 07:58 PM
catch(UnityEngine)
This isn't going to work. That would catch something thrown of type 'UnityEngine' which isn't something that is thrown. Use 'Exception' or some other more specific Exception class.
I have used the following variations without success:
catch(Exception)
catch(err)
catch(UnityException)
catch(e)
None of them have activated. I'll update the op.
Network.TestConnection() doesn't throw any exceptions.. http://docs.unity3d.com/Documentation/ScriptReference/Network.TestConnection.html
You have to get the return value and exa$$anonymous$$e it.
What is this in reference to then?
Cannot resolve connection tester address, you must be connected to the internet before perfor$$anonymous$$g this or set the address to something accessible to you. UnityEngine.Network:TestConnection() Servertesting:TestConnection() (at Assets/2d/Scripts/Servertesting.js:37) Servertesting:OnGUI() (at Assets/2d/Scripts/Servertesting.js:30)
It shows up in the console as a error.
In the interest of full disclosure, here is my full code, and a link to the issue I set out to solve. The current code is basically that testconnection code with a little bit inserted to deal with the error sent by initiating the " connectionTestResult = Network.TestConnection(); " portion without a active internet connection. I'm trying to find an intelligent way of testing for a active connection that doesn't spit error codes, since it is not inherent in the engine for some reason.
BTW: Thanks for bearing with me, I know this is probably simple for ya, but its a new frontier for myself ^.^
Too much to add in one comment. Adding full code to op. :/
I've never messed with networking stuff in Unity, so it's out of my depth. I do know that if you can't catch this error with a generic 'Exception', then it may just be uncatchable. Not all errors are formally thrown as exceptions!
Your answer
![](https://koobas.hobune.stream/wayback/20220613114110im_/https://answers.unity.com/themes/thub/images/avi.jpg)