2015-02-13 8 views
1

В linux я хочу подключиться к демону через сокет в скомпилированной программе c.cgi (cgic), которая прослушивает входящие соединения сокетов. Я знаю, что сервер работает, потому что он будет отвечать на команды «nc». Предположим, что сервер черного цвета, я не могу его изменить. В моей клиентской программе у меня есть:Сокетное соединение из скомпилированного c.cgi

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? Что мне делать, чтобы попытаться подключить этот сокет или что я могу сделать для дальнейшего устранения проблемы?

ответ

2

При работе с типом sockaddr_in вам необходимо знать, что оба адреса сокета sin_addr.s_addr и порт sin_port должны быть в сетевом порядке. Скорее всего, ваш хозяин малоподвижный.

Таким образом, вы должны использовать inet_addr возвращает правильное значение, но для адреса сокета вы должны использовать:

address.sin_port = htons(3042); 
+0

Спасибо проверил код сервера и это был мой вопрос. – Nimjox

Смежные вопросы