Ich brauch mal wieder Eure Hilfe. Nachdem mein Proggie unter Linux jetzt ganz gut läuft, soll es auf Windows portiert werden. Optimalerweise sollte natürlich ein Quelltext exisitieren, der unter beiden Betriebssystemen kompiliert. Also dürfen die Veränderungen nicht allzu groß werden.
Erster Schritt war, die linuxspezifischen Headerfiles für die Sockets durch die winsock.h zu ersetzen. Zweiter Schritt war die Implementierung der offenbar von Windows verlangten Initialisierung der Winsock. Das Codefragment sieht jetzt so aus:
Header:
Code:
Die auskommentierten Zeilen waren für Linux. So das kompiliert auch schon mal, allerdings wirft mir der Compiler (mingw) unter Windows am Ende jedes mal folgende Fehlermeldungen:
Ich steig einfach net ganz dahinter warum...
Erster Schritt war, die linuxspezifischen Headerfiles für die Sockets durch die winsock.h zu ersetzen. Zweiter Schritt war die Implementierung der offenbar von Windows verlangten Initialisierung der Winsock. Das Codefragment sieht jetzt so aus:
Header:
Code:
#ifndef MYNET_H
#define MYNET_H
// #include <sys/types.h>
// #include <sys/socket.h>
#include <string>
// #include <netinet/in.h>
// #include <arpa/inet.h>
// #include <unistd.h>
#include <stdlib.h>
#include <winsock.h>
#include <io.h>
class Mynet
{
public:
Mynet(void);
int connectToServer(int port, int ip);
int sendData(int current_commands[]);
int recvData();
bool connected;
private:
struct sockaddr_in cli_sock_info;
int cli_sock;
int result;
};
#endif
Code:
Code:
#include "mynet.h"
#include "stdio.h"
Mynet::Mynet(void)
{
connected = false;
}
int Mynet::connectToServer(int port, int ip)
{
WORD wVersionRequested;
WSADATA wsaData;
wVersionRequested = MAKEWORD (1, 1);
if (WSAStartup(wVersionRequested, &wsaData) != 0)
{
return -1;
}
cli_sock_info.sin_family = AF_INET;
cli_sock_info.sin_addr.s_addr = htons(ip);
cli_sock_info.sin_port = htons(port);
cli_sock = socket(AF_INET, SOCK_STREAM, 0);
result = connect(cli_sock, (struct sockaddr *)&cli_sock_info, sizeof(cli_sock_info));
if(result == 0)
{
connected = true;
}
else
{
connected = false;
}
return result;
}
int Mynet::sendData(int current_commands[])
{
int bytes_sent;
bytes_sent = send(cli_sock, (const char*)current_commands, 2*sizeof(int), 0);
return bytes_sent;
}
int Mynet::recvData()
{
}
Die auskommentierten Zeilen waren für Linux. So das kompiliert auch schon mal, allerdings wirft mir der Compiler (mingw) unter Windows am Ende jedes mal folgende Fehlermeldungen:
Code:
release\mynet.o(.text+0x3f):mynet.cpp: undefined reference to `WSAStartup@8'
release\mynet.o(.text+0x5d):mynet.cpp: undefined reference to `htons@4'
release\mynet.o(.text+0x72):mynet.cpp: undefined reference to `htons@4'
release\mynet.o(.text+0x94):mynet.cpp: undefined reference to `socket@12'
release\mynet.o(.text+0xb5):mynet.cpp: undefined reference to `connect@12'
release\mynet.o(.text+0xf6):mynet.cpp: undefined reference to `send@16'
collect2: ld returned 1 exit status
mingw32-make[1]: *** [release\RemoteControl-v04.exe] Error 1
mingw32-make: *** [release] Error 2
Ich steig einfach net ganz dahinter warum...