我嘗試使用C連接到駐留在LAN中的設備(Allen-Bradley PLC)。 我嘗試連接的設備沒有託管監聽我的應用程序的應用程序(因爲我無法控制它)。 建立連接後,我可以發送和接收請求數據的數據包。我已經在C#中開發了一個工作應用程序(使用System.Net.Sockets),該應用程序連接並與此設備進行通信。 但是,我寫的C代碼似乎在它建立連接的部分失敗。 這裏是我的源代碼:使用C連接到通過TCP/IP的LAN上的設備使用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'是一個空終止的C-strings? – LPs
@LPs程序在「連接失敗」部分退出。緩衝區只是一個意大利麪代碼來測試連接是否首先建立, – Jarvis