Ok. Also habe ich ein einfaches Client-Programm, das Bilder über UDP an eine bestimmte IP-Adresse sendet. Bei der angegebenen IP hört ein Serverprogramm zu und sollte die Bilder erhalten.Problem mit einfacher UDP-Client/Server-Anwendung
Wenn ich beide Programme auf localhost versuche (d. H. Sie laufen beide bei 127.0.0.1), funktioniert es und der Server empfängt die Bilder. Wenn ich versuche, den Client und die Serverprogramme auf verschiedenen PCs im selben Netzwerk zu installieren, funktioniert es nicht.
147.232.24.163 ist die Server-IP, 147.232.24.150 ist die Client-IP.
Hier ist mein Client-Programm:
// Initialize UDP.
struct sockaddr_in server;
int n_sent;
int socketId = socket(AF_INET, SOCK_DGRAM, 0);
if (socketId < 0)
{
cout << "Problem creating socket." << endl;
}
server.sin_family = AF_INET;
server.sin_addr.s_addr = inet_addr("147.232.24.163");
// Establish the server port number - we must use network byte order!
server.sin_port = htons(42001);
for (int iter = 0; iter < 60; iter++)
{
// load image into jpegBuf
n_sent = sendto(socketId, reinterpret_cast<char*> (&jpegBuf[0]), jpegBuf.size(), 0, (struct sockaddr*) &server, sizeof(server));
if (n_sent < 0) {
cout << "Problem sending data." << endl;
}
}
close(socketId);
mein Server-Programm ist hier:
int main()
{
int bufferSize = 1024000;
int iSockFd = -1;
int iLength = 0;
struct sockaddr_in servAddr, cliAddr;
char buff[bufferSize];
iSockFd=socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
memset(&servAddr, 0, sizeof(servAddr));
memset(&cliAddr, 0, sizeof(cliAddr));
servAddr.sin_family = AF_INET;
servAddr.sin_addr.s_addr = inet_addr("147.232.24.163");
servAddr.sin_port = htons(42001);
int cliAddrLen = sizeof(struct sockaddr_in);
int bindRet = bind(iSockFd, (struct sockaddr*)&servAddr, sizeof(servAddr));
cout << "Bind returned " << bindRet << endl;
int i = 0;
while (true)
{
int iRcvdBytes=recvfrom(iSockFd, buff, bufferSize, 0,
(struct sockaddr*)&cliAddr, (socklen_t*)&cliAddrLen);
if (0 == i % 5)
{
cout << "Received " << iRcvdBytes << " bytes from the client" << endl;
}
i++;
}
close(iSockFd);
return 0;
}
Irgendwelche Ideen, warum es nicht funktioniert? Ich bekomme keine Fehlermeldungen.
Ich habe die Programme so vereinfacht, dass es nur die wesentlichen sockelbezogenen Sachen gibt. Ich weiß, dass es ein Problem ist, sehr lange Code-Snippets zu lesen. –
Stellen Sie sicher, dass alle Firewalls auf den beiden Computern deaktiviert sind ... viele Firewalls filtern eingehende UDP-Pakete. –
@ Jeremy Friesner habe ich dafür gesorgt. Um 100% sicher zu sein, habe ich Firewalls auf beiden PCs komplett deinstalliert. –