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
// 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);
}
Alles anzeigen
Und hier der Java Code vom Socket Server :
Java
import 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);}
}
}
Alles anzeigen
Ich wette ich hab etwas falsch gemacht