Я пытаюсь подключиться к устройству (Allen-Bradley PLC), находящемуся в локальной сети, используя C. Устройство, к которому я пытаюсь подключиться, не содержит приложение, которое прослушивает мое приложение (поскольку я не контролирую его). Как только соединение установлено, я могу отправлять и получать пакеты, запрашивающие данные. Я уже разработал рабочее приложение на C# (используя System.Net.Sockets), которое подключается и взаимодействует с этим устройством. Однако код C, который я пишу, кажется, терпит неудачу в той части, где он устанавливает соединение. Вот мой исходный код:Подключение к устройству в локальной сети через TCP/IP с помощью 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 потерпеть неудачу в той части, где он устанавливает connection._ какая ошибка? не могли бы вы уточнить, пожалуйста? – LPs
Боковое примечание: вы уверены, что 'buffer' - это N-концевые C-строки? – LPs
@LPs Программа выходит из раздела «Не удалось подключиться». Буфер был всего лишь кодом спагетти, чтобы проверить, установлено ли соединение первым, – Jarvis