Тема: Як запустити на Ubuntu те, що скомпільоване на Windows?
Хай. Написав простецький сервер
#include <cstdio>
#include <iostream>
#include <winsock2.h>
#include <cstring>
#include <vector>
#include <windows.h>
std::string longToIp(long ip)
{
int b[32];
std::string fin[4];
int it = 0;
while (ip > 0)
{
int tmp = ip % 2 == 0 ? 0 : 1;
b[it] = tmp;
ip /= 2;
if (it % 8 == 0 && it != 0)
{
int tmp1 = 0;
for (int i = it - 8, j = 0; i < it; i++, j++)
{
tmp1 += pow(2, j)*b[i];
}
char tmp2[4];
_itoa_s(tmp1, tmp2, 4, 10);
fin[(int)floor(it / 8.0) - 1] = tmp2;
}
it++;
}
int tmp1 = 0;
for (int i = 0; i < it % 8; i++)
{
tmp1 += pow(2, i)*b[(it - it % 8) + i];
}
char tmp2[4];
_itoa_s(tmp1, tmp2, 4, 10);
fin[3] = tmp2;
std::string res;
for (int i = 0; i < 4; i++)
{
res += fin[i];
if (i != 3)
res += '.';
}
return res;
}
class Client
{
public:
SOCKADDR_IN addr;
int addrLength;
Client()
{
addrLength = sizeof(addr);
}
bool Compare(const Client& other)
{
if (other.addr.sin_addr.S_un.S_addr == addr.sin_addr.S_un.S_addr
&& other.addr.sin_port == addr.sin_port)
{
return true;
}
else
{
return false;
}
}
};
int main()
{
WSADATA WsaData;
SOCKET sock;
int err = WSAStartup(0x0101, &WsaData);
if (err == SOCKET_ERROR)
{
printf("WSAStartup() failed: %ld\n", GetLastError());
system("pause>>void");
return 1;
}
if ((sock = socket(AF_INET, SOCK_DGRAM, 0)) < 0)
{
std::cout << "Cannot create a socket" << std::endl;
system("pause>>void");
return 1;
}
SOCKADDR_IN sin;
sin.sin_family = AF_INET;
sin.sin_port = htons(80);
sin.sin_addr.s_addr = htonl(INADDR_ANY);
if (bind(sock, (SOCKADDR*)&sin, sizeof(sin)) < 0)
{
std::cout << "Bind error: " << GetLastError() << std::endl;
system("pause>>void");
return 1;
}
int err3 = listen(sock, SOMAXCONN);
std::vector<Client> from;
while (true)
{
char recvBuff[256];
Client client;
int n = recvfrom(sock, recvBuff, 256, 0, (sockaddr*)&client.addr, (int*)&client.addrLength);
if (n < 0)
{
std::cout << "Get <0 bytes: " << n << std::endl;
}
else
{
std::cout << "Received: " << n << " bytes, from ip: " << longToIp(client.addr.sin_addr.S_un.S_addr).data()
<< " from port: " << htons(client.addr.sin_port) << std::endl;
std::string str = recvBuff;
str.resize(n);
std::cout << str.data() << std::endl;
bool add = true;
if (from.size() > 0)
{
for (size_t i = 0; i < from.size(); i++)
{
if (!from[i].Compare(client))
{
sendto(sock, recvBuff, n, 0, (sockaddr*)&from[i].addr, from[i].addrLength);
}
else
{
add = false;
}
}
}
if (add)
{
from.push_back(client);
}
}
}
closesocket(sock);
system("pause>>void");
return 0;
}
Замовив собі халявний впн і поставив там ubuntu, бо окрім лінуксів там нічо не ставиться. Далі я хочу запустити там свій server.exe.
Що я маю робити, аби воно запрацювало? Let's експерементувати!