So jetzt weiß ich auch, warums unter Windows net geht. Ausnahmsweise kann ichs jetzt nicht auf M$ schieben, das Problem existiert unter Linux genauso:
Ich lese mittels QInputDialog::getText eine IP Adresse ein, wandle diese mit der Funktion "toInt" in nen Integer um und gebe das an mein Netzwerkmodul weiter. In der Praxis sieht das so aus:
Die connectToServer() sieht dann (auszugsweise) aus:
Das Konstrukt funktioniert bestens mit verschiedenen Ports und auch mit der Loopbackaddresse (127.0.0.1). Wenn ich allerdings ne andere IP Adresse (z. B. 172.16.0.13) angebe, dann scheint etwas bei der Umwandlung des QStrings in den Integer schief zu gehen (oder der Integer wird als ungültiger Wert in der Zeile cli_sock_info.sin_addr.s_addr = htons(ip) interpretiert).
Ersetze ich die Zeile "cli_sock_info.sin_addr.s_addr = htons(ip);" durch "cli_sock_info.sin_addr.s_addr = inet_address("172.16.0.13");" geht alles einwandfrei.
Was mach ich da wieder falsch? Oder kennt von Euch jemand nen einfachen Weg, nen QString in nen normalen String umzuwandeln? Oder den QString direkt als IP zu interpretieren? So falsch kann mein Ansatz ja wohl net sein - bei Angabe von 127.0.0.1 geht ja alles...
Ich lese mittels QInputDialog::getText eine IP Adresse ein, wandle diese mit der Funktion "toInt" in nen Integer um und gebe das an mein Netzwerkmodul weiter. In der Praxis sieht das so aus:
Code:
void AppMainWindow::setServer()
{
bool ok;
server = QInputDialog::getText(this, tr("Connect to server"), tr("Server IP: "), QLineEdit::Normal, tr("172.16.0.13"), &ok);
port = QInputDialog::getText(this, tr("Connect to server"), tr("Server Port: "), QLineEdit::Normal, tr("5000"), &ok);
server_ip = server.toInt(&ok, 10);
server_port = port.toInt(&ok, 10);
connectToServer();
}
Die connectToServer() sieht dann (auszugsweise) aus:
Code:
cli_sock_info.sin_addr.s_addr = htons(ip);
cli_sock_info.sin_port = htons(port);
Das Konstrukt funktioniert bestens mit verschiedenen Ports und auch mit der Loopbackaddresse (127.0.0.1). Wenn ich allerdings ne andere IP Adresse (z. B. 172.16.0.13) angebe, dann scheint etwas bei der Umwandlung des QStrings in den Integer schief zu gehen (oder der Integer wird als ungültiger Wert in der Zeile cli_sock_info.sin_addr.s_addr = htons(ip) interpretiert).
Ersetze ich die Zeile "cli_sock_info.sin_addr.s_addr = htons(ip);" durch "cli_sock_info.sin_addr.s_addr = inet_address("172.16.0.13");" geht alles einwandfrei.
Was mach ich da wieder falsch? Oder kennt von Euch jemand nen einfachen Weg, nen QString in nen normalen String umzuwandeln? Oder den QString direkt als IP zu interpretieren? So falsch kann mein Ansatz ja wohl net sein - bei Angabe von 127.0.0.1 geht ja alles...