Ich versuche, eine Verbindung zu einem Gerät (Allen-Bradley-SPS) in einem LAN mit C. Das Gerät, das ich versuchen zu verbinden Host nicht ein Anwendung, die auf meine Anwendung hört (da ich keine Kontrolle darüber habe). Sobald die Verbindung hergestellt ist, kann ich Pakete senden und empfangen, die Daten anfordern. Ich habe bereits eine funktionierende Anwendung in C# entwickelt (mit System.Net.Sockets), die dieses Gerät verbindet und mit ihm kommuniziert. Der C-Code, den ich schreibe, scheint jedoch in dem Teil fehlzuschlagen, in dem er eine Verbindung herstellt. Hier ist meine Quellcode:Verbinden mit einem Gerät im LAN über TCP/IP mit C
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#ifdef WINDOWS
#include <winsock2.h>
#else
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#endif
#include <errno.h>
int main() {
char *servIP = "192.168.10.31";
in_port_t servPort = 503;
int sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if (sock < 0) {
fprintf(stderr, "socket() failed: %s\n", strerror(errno));
exit(1);
}
struct sockaddr_in servAddr;
memset(&servAddr, 0, sizeof(servAddr));
servAddr.sin_family = AF_INET;
int rtnVal = inet_pton(AF_INET, servIP, &servAddr.sin_addr.s_addr);
if (rtnVal <= 0)
{
printf("failed"); exit(1);
}
if (connect(sock, (struct sockaddr *) &servAddr, sizeof(servAddr)) < 0)
{
printf("failed connecting"); exit(1);
}
else {
printf("connected");
}
char x[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
printf("terE");
write(sock, x, sizeof(x));
char buffer[1024];
recv(sock, buffer, 1024, 0);
printf("Data received: %s", buffer);
}
_seems an dem Teil zum Scheitern verurteilt, wo es connection._ Welche Fehler begründet? Könntest du bitte etwas ausarbeiten? – LPs
Seitennotiz: Sind Sie sicher, dass "Buffer" ein Null beendet C-Strings ist? – LPs
@LPs Das Programm endet bei "fehlgeschlagene Verbindung". Der Puffer war nur ein Spaghetti-Code, um zu testen, ob die Verbindung zuerst besteht, – Jarvis