来自编译的c.cgi的套接字连接

时间:2015-02-13 20:06:45

标签: c sockets 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);

返回"连接被拒绝"此时出错。作为测试,我将netcat编译成.cgi程序,该程序可以正常工作:

system("echo '-r get=DeviceNo' | nc localhost 3042");

我是否遗漏了一些内容,也许是如何在.cgi中处理套接字类的?我该怎么做才能尝试让这个套接字连接,或者我该怎样做才能进一步解决我的问题呢?

1 个答案:

答案 0 :(得分:2)

使用sockaddr_in类型时,您需要知道套接字地址sin_addr.s_addr和端口sin_port必须按网络字节顺序排列。很可能你的主人是小端的。

所以你需要使用inet_addr返回正确的值,但是对于你需要使用的套接字地址:

address.sin_port = htons(3042);