Jump to content
Unity Insider Forum

Online Highscore java.io.EOF Exception


Nyral

Recommended Posts

Hallo,

 

hoffe ihr könnt mir bei meinem Problem helfen. Bin gerade dabei ein kleines Android Spiel zu entwickeln. Das Spiel beinhaltet auch einen online Highscore.

Im großen und ganzen läuft alles schon so wie es soll. Zumindest wenn ich es am PC oder Handy im eigenen W-Lan teste. Hier funktioniert der Upload und Download des Highscores einwandfrei.

Wenn ich jetzt aber versuche einen neuen Highscore über das Handynetz auf meinen vServer hochzuladen bekomme ich immer den Fehler: Java.io.EOF Exception.

Das Herunterladen des Highscores funktioniert dabei einwandfrei. Habe leider keine Ahnung woran das liegen könnte, da es ja über W-Lan funktioniert.

 

Als Datenbank verwende ich MySQL die auf meinem vServer läuft.

Habe mich nach diesem Tutorial für den online Highscore gehalten: Server side Highscore

 

Mein php-file das dass eintragen in die Datenbank übernimmt:

<?php
$isDebug = 0; // 1 = Debug output is on; 0 = Debug output is off

$db = mysql_connect('host', 'database', 'pw') or die ('Could not connect: ' . mysql_error());
mysql_select_db('table') or die ('Could not select database');

$name = mysql_real_escape_string($_GET['name'], $db);
$score = mysql_real_escape_string($_GET['score'], $db);
$hash = $_GET['hash'];

$secretKey = "secret";
$real_hash = md5($name . $score . $secretKey);
if($real_hash == $hash)
{
 $query = "insert into table values (null, '$name', '$score');";
 $result = mysql_query($query) or die ('Query failed: ' . mysql_error());

 if($isDebug == 1)
  echo "Insert user score is done.";
}

if($isDebug == 1)
 echo "Ende set user score script";
?>

 

Und hier die Upload Methode in Unity:

IEnumerator SetScore(string _name, int _score, string _setScorePhpURL)
{
//Set the upload flag
hsCurrentHighscoreConnection = HIGHSCORECONNECTION.HC_UPLOADINGSCORE;
//Create the hash
string strHash = MD5Sum(_name + _score + strSecretKey);
//Create the url
string strSetScoreURL = _setScorePhpURL + "name=" + WWW.EscapeURL(_name) + "&score=" + _score + "&hash=" + strHash;

WWW wwwHighscoreServer = new WWW(strSetScoreURL);

//Set the score
yield return wwwHighscoreServer;
//Check the score upload
if (wwwHighscoreServer.error != null)
{
	hsCurrentHighscoreConnection = HIGHSCORECONNECTION.HC_ERROR;
	Debug.LogError("Upload highscore error: " + wwwHighscoreServer.error);
}
else
{
	//Set upload is done flag
	hsCurrentHighscoreConnection = HIGHSCORECONNECTION.HC_UPLOADISDONE;
}
}

 

Schon mal danke im voraus für eure Hilfe.

 

MFG

Nyral

Link zu diesem Kommentar
Auf anderen Seiten teilen

  • 2 weeks later...

Sry für den weiteren Doppelpost aber das Thema kann nun geschlossen werden. Habe das Problem nun gelöst.

 

Habe für den Upload des Scores die Hilfsklasse "WWWForm" von Unity verwendet die die Datenübertragung zu einem Server managed.

 

So sieht nun das überarbeitete Unity script aus:

IEnumerator SetScore(string _name, int _score, string _setScorePhpURL)
{
	//Set the upload flag
	hsCurrentHighscoreConnection = HIGHSCORECONNECTION.HC_UPLOADINGSCORE;

	//Create the hash
	string strHash = MD5Sum(_name + _score + strSecretKey);

	//Helper class upload to server
	WWWForm wwwForm = new WWWForm();
	wwwForm.AddField("name", _name);
	wwwForm.AddField("score", _score);
	wwwForm.AddField("hash", strHash);
	WWW wwwHighscoreServer = new WWW(strSetScoreURL, wwwForm);

	//Set the score
	yield return wwwHighscoreServer;

	//Check the score upload
	if (wwwHighscoreServer.error != null)
	{
			hsCurrentHighscoreConnection = HIGHSCORECONNECTION.HC_ERROR;
			Debug.LogError("Upload highscore error: " + wwwHighscoreServer.error);
	}
	else
	{
			//Set upload is done flag
			hsCurrentHighscoreConnection = HIGHSCORECONNECTION.HC_UPLOADISDONE;

			 wwwHighscoreServer.Dispose();
	}
}

 

Das php file habe ich wie folgt angepasst:

<?php
$isDebug = 0; // 1 = Debug output is on; 0 = Debug output is off
$db = mysql_connect('host', 'database', 'pw') or die ('Could not connect: ' . mysql_error());
mysql_select_db('table') or die ('Could not select database');
$name = mysql_real_escape_string($_POST['name'], $db);
$score = mysql_real_escape_string($_POST['score'], $db);
$hash = $_GET['hash'];
$secretKey = "secret";
$real_hash = md5($name . $score . $secretKey);

if($real_hash == $hash)
{
	$query = "insert into table values (null, '$name', '$score');";
	$result = mysql_query($query) or die ('Query failed: ' . mysql_error());
	if($isDebug == 1)
		echo "Insert user score is done.";
}
if($isDebug == 1)
	echo "Ende set user score script";
?>

 

So funktioniert der Score upload sowohl daheim im W-Lan sowie mit dem Handynetz.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Archiviert

Dieses Thema ist jetzt archiviert und für weitere Antworten gesperrt.

×
×
  • Neu erstellen...