在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中处理套接字类的?我该怎么做才能尝试让这个套接字连接,或者我该怎样做才能进一步解决我的问题呢?
答案 0 :(得分:2)
使用sockaddr_in
类型时,您需要知道套接字地址sin_addr.s_addr
和端口sin_port
必须按网络字节顺序排列。很可能你的主人是小端的。
所以你需要使用inet_addr
返回正确的值,但是对于你需要使用的套接字地址:
address.sin_port = htons(3042);