已编译的套接字连接 c.cgi
Socket connection from compiled c.cgi
在 linux 我想通过已编译的 c.cgi 程序 (cgic) 中的套接字连接到恶魔,该套接字正在侦听传入的套接字连接。我知道服务器可以正常工作,因为它会响应 'nc' 命令。假设服务器是黑盒的,我无法更改它。在我的客户端程序中,我有:
int sockfd;
int len;
struct sockaddr_in address;
int result;
char ch[] = "get=DeviceNo";
sockfd = socket(AF_INET, SOCK_STREAM, 0);
address.sin_family = AF_INET;
address.sin_addr.s_addr = inet_addr("127.0.0.1");
address.sin_port = 3042;
len = sizeof(address);
result = connect(sockfd, (struct sockaddr *) &address, len);
其中 returns 此时出现 "Connection Refused" 错误。作为测试,我将 netcat 编译成 .cgi 程序,该程序确实有效:
system("echo '-r get=DeviceNo' | nc localhost 3042");
我是否遗漏了一些东西,也许套接字 class 在 .cgi 中是如何处理的?我应该怎么做才能尝试连接此套接字,或者我能做些什么来进一步解决我的问题?
使用sockaddr_in
类型时,您需要知道套接字地址sin_addr.s_addr
和端口sin_port
都必须是网络字节顺序。您的主机很可能是小端。
所以你需要使用 inet_addr
returns 正确的值,但是对于你需要使用的套接字地址:
address.sin_port = htons(3042);
在 linux 我想通过已编译的 c.cgi 程序 (cgic) 中的套接字连接到恶魔,该套接字正在侦听传入的套接字连接。我知道服务器可以正常工作,因为它会响应 'nc' 命令。假设服务器是黑盒的,我无法更改它。在我的客户端程序中,我有:
int sockfd;
int len;
struct sockaddr_in address;
int result;
char ch[] = "get=DeviceNo";
sockfd = socket(AF_INET, SOCK_STREAM, 0);
address.sin_family = AF_INET;
address.sin_addr.s_addr = inet_addr("127.0.0.1");
address.sin_port = 3042;
len = sizeof(address);
result = connect(sockfd, (struct sockaddr *) &address, len);
其中 returns 此时出现 "Connection Refused" 错误。作为测试,我将 netcat 编译成 .cgi 程序,该程序确实有效:
system("echo '-r get=DeviceNo' | nc localhost 3042");
我是否遗漏了一些东西,也许套接字 class 在 .cgi 中是如何处理的?我应该怎么做才能尝试连接此套接字,或者我能做些什么来进一步解决我的问题?
使用sockaddr_in
类型时,您需要知道套接字地址sin_addr.s_addr
和端口sin_port
都必须是网络字节顺序。您的主机很可能是小端。
所以你需要使用 inet_addr
returns 正确的值,但是对于你需要使用的套接字地址:
address.sin_port = htons(3042);