Ja hab einige Teile von ihn übernommen. Hab schon gesehen das einen Timer drin hat, hab ihn nur mal so weggelassen. Werde ihn aber jetzt mal einbauen
Beiträge von TheCrow
-
-
Ok, ich werde mal probieren das zu ändern, mal schauen ob es dann irgendwie funktioniert
-
Hallo.
Ich bin am verzweifeln
Meine Problem ist, meine "Lobby" bekommt keine Daten vom Socket Server.
Die "Lobby" verbindet sich mit dem Socket server , der Socket Server sendet die infos (vonder der Datenbank (ip,port,hostname etc)), doch es kommt nicht an.
Hier mal der Code :myActor.ccp
C
Alles anzeigen// Fill out your copyright notice in the Description page of Project Settings. #include "Lobby.h" #include "MyActor.h" #include "Runtime/Networking/Public/Networking.h" #include "Runtime/Sockets/Public/Sockets.h" #include "Runtime/Networking/Public/Interfaces/IPv4/IPv4Address.h" #include "Runtime/Sockets/Public/SocketSubsystem.h" #include "Runtime/Core/Public/Templates/SharedPointer.h" #include <string> // Sets default values AMyActor::AMyActor() { // Set this actor to call Tick() every frame. You can turn this off to improve performance if you don't need it. PrimaryActorTick.bCanEverTick = false; } FString AMyActor::StringFromBinaryArray(const TArray<uint8>& BinaryArray) { std::string cstr(reinterpret_cast<const char*>(BinaryArray.GetData()), BinaryArray.Num()); return FString(cstr.c_str()); } // Called when the game starts or when spawned void AMyActor::BeginPlay() { Super::BeginPlay(); FSocket* Socket = ISocketSubsystem::Get(PLATFORM_SOCKETSUBSYSTEM)->CreateSocket(NAME_Stream, TEXT("Lobby Sockel"), false); TArray<uint8> data; uint32 size = 1000; uint32 Size; int32 NewSize = 0; int MaxUser = 32; int CurrUser = 0; int32 port = 1236; FIPv4Address ip; ip = FIPv4Address(127, 0, 0, 1); TSharedRef<FInternetAddr> addr = ISocketSubsystem::Get(PLATFORM_SOCKETSUBSYSTEM)->CreateInternetAddr(); addr->SetIp(ip.GetValue()); addr->SetPort(port); bool connected = Socket->Connect(*addr); Socket->SetReceiveBufferSize(ReceiveBufferSize, NewSize); while (Socket->HasPendingData(Size)) { data.Init(FMath::Min(Size, 65507u)); int32 Read = 0; Socket->Recv(data.GetData(), data.Num(), Read); } if (data.Num() <= 0){ GEngine->AddOnScreenDebugMessage(-1, 5.f, FColor::Red, FString::Printf(TEXT("No Data"))); } else{ const FString Reciveue4String = StringFromBinaryArray(data); GEngine->AddOnScreenDebugMessage(-1, 5.f, FColor::Red, FString::Printf(TEXT("Data Bytes Read ~> %d"), data.Num())); GEngine->AddOnScreenDebugMessage(-1, 5.f, FColor::Red, FString::Printf(TEXT("As String Data ~> %s"), *Reciveue4String)); } if (connected == true){ GEngine->AddOnScreenDebugMessage(-1, 20.f, FColor::Red, TEXT("Sockel Connected!")); } } // Called every frame void AMyActor::Tick(float DeltaTime) { Super::Tick(DeltaTime); //GetWorldTimerManager().SetTimer(this, &AMyActor::TCPConnectionListener, 0.01, true); }
Und hier der Java Code vom Socket Server :
Java
Alles anzeigenimport java.net.*; import java.io.*; import java.sql.*; /* * To change this license header, choose License Headers in Project Properties. * To change this template file, choose Tools | Templates * and open the template in the editor. */ // // Sending Ip, Servername, Port, Spieleranzahl // /** * * @author patrick */ public class SocketServer implements Serializable{ static int backlog = 10; // Lange der Warteschlange static int ports = 1236; //Portnummer /////MySQL Anmeldedaten/////////////// final static String hostname = "xxxxxxx"; final static String port = "xxxxxx"; final static String dbname = "xxxxxxx"; final static String user = "xxxxxxx"; final static String password = "xxxxxxx"; ////////////////////////////////////// /** * @param args the command line arguments */ public static void main(String[] args) { //Socket Erstellen// try{ byte[] info; Connection conn = null; ServerSocket socket = new ServerSocket(ports, backlog); for ( ; ; ){ //////////////////////////// //Socket wartet auf Clienten //////////////////////////// System.out.println("* Warte auf Clienten"); Socket sockConnet = socket.accept(); System.out.println("* Verbunden mit" + sockConnet); DataOutputStream socketout = new DataOutputStream(sockConnet.getOutputStream()); ///////////////////////////////////////////////////////////////////////// //Datenbankverbindung wird hergestellt und Infos werden eingetragen// //////////////////////////////////////////////////////////////////////// try{ System.out.println("* Treiber laden"); Class.forName("org.gjt.mm.mysql.Driver").newInstance(); }catch(Exception e){ System.err.println("Unable to load the Driver"); e.printStackTrace(); } try{ System.out.println("*Verbindung aufbauen"); String url = "jdbc:mysql://"+hostname+":"+port+"/"+dbname; conn = DriverManager.getConnection(url,user,password); System.out.println("* Statement beginnen"); Statement stmt = conn.createStatement(); System.out.println("*Abfrage beginnt"); String sqlCommand = "SELECT ID,ServerIp,Port,ServerName,Spieleranzahl FROM server"; ResultSet rs = stmt.executeQuery(sqlCommand); System.out.println("*Ergebnis Anzeigen"); while (rs.next()) { int ID = rs.getInt(1); String serverip = rs.getString(2); int portser = rs.getInt(3); String name = rs.getString(4); int anzahl = rs.getInt(5); System.out.println(ID + "\n" +serverip + "\n" + portser + "\n" + name +"\n" + anzahl ); info = (ID + serverip + portser + name + anzahl).getBytes(); System.out.println(info); socketout.write(info); } System.out.println("* Statement beenden"); stmt.close(); System.out.println("*Datenbank Verbindung beendet"); conn.close(); }catch(SQLException sqle){ System.out.println("SQLException: " + sqle.getMessage()); System.out.println("SQLState: " + sqle.getSQLState()); System.out.println("VendorError: " + sqle.getErrorCode()); sqle.printStackTrace(); } /////////////////////////// //Socket wird geschlossen// ////////////////////////// sockConnet.close(); } } catch(IOException e){System.err.println(e);} } }
Ich wette ich hab etwas falsch gemacht
-
Willkommen
-
Hört sich gut an viel Erfolg
-
-
Willkommen hier im Forum
-
Willkommen hier im Forum
-
-
Ich würde erst klein anfangen und einige Tutorials anschauen.Ich hab den Fehler gemacht dass ich gleich angefangen hab und gleich ein großes Projekt machen wollte. Nun bin ich schon weit muss aber einige Tutorials lesen/anschauen
-
Willkommen
-
Willkommen hier
-
Willkommen
-
Das Thema ist auch nicht so leicht Man muss sich da richtig einarbeiten
-
Willkommen hier im Forum
-
Willkommen
-
Das ist eine gute Idee Werde eine Art Stargate Tor machen
-
@ExCluSiv3 Hab nur mal so gefragt, wie er es macht Bei meinem Game wird der Server momentan noch in der Datenbank bleiben, aber werde das in Zukunft dann auch überarbeiten
-
Bravo, jetzt gefällt mir diese Idee
Werde mal schauen wie ich es dann mache, also für jeden Gameserver(also wo man dann in einer Arena spielt) ein Tor? -
Den Namen hab ich schon mal gehört Aber wie findest du die Idee?
@ruohki Hört sich gut an^^ Wie machst du das dass er solange in der Datenbank bleibt ?