Ошибка сокета: соединение отказано - что я делаю неправильно?
Я только начал изучать основы сокетов (Linux). Я попробовал свою руку на небольшом примере, но это не сработает, и я не знаю, что случилось.
Я получаю сообщение об ошибке "Connection Refused".
Здесь мой код:
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netinet/ip.h>
#include <stdio.h>
#include <string.h>
#include <errno.h>
int main() {
int c;
c = socket(AF_INET, SOCK_STREAM, 0);
if (c < 0) {
printf("Error in creating socket! %s\n", strerror(errno));
return 1;
}
struct sockaddr_in server;
memset(&server, 0, sizeof(server));
server.sin_port = htons(1234);
server.sin_family = AF_INET;
server.sin_addr.s_addr = inet_addr("127.0.0.1"); //local host
if (connect(c, (struct sockaddr *)&server, sizeof(server)) < 0) {
// Here is my error
printf("Error when connecting! %s\n",strerror(errno));
return 1;
}
while(1) {
char msg[100];
printf("Give message: ");
fgets(msg, sizeof(msg), stdin);
send(c, &msg, sizeof(msg), 0);
char resp[100];
recv(c, &resp, sizeof(resp), 0);
printf("Received: %s\n", resp);
}
close(c);
}
ИЗМЕНИТЬ
Конечно! ошибка была на самом деле на сервере. Я просто нашел, что клиент отправил сообщение, поэтому я сузил свой взгляд, даже не стал оглядываться на сервер.
Так как ошибка, похоже, также на моем сервере, я могу задать другой вопрос и связать его здесь
Сервер прослушивал (12345)...
Ответы
Ответ 1
В соответствии с справочной страницей:
ECONNREFUSEDНикто не прослушивает удаленный адрес.
Чтобы обеспечить простую удаленную конечную точку, которая принимает ваше соединение и отправляет обратно полученные данные (эхо-сервер), вы можете попробовать что-то вроде этого python server (или использовать netcat):
import socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind(("localhost", 1234))
s.listen(1)
conn, addr = s.accept()
print 'Connected by', addr
while 1:
data = conn.recv(1024)
if not data: break
conn.sendall(data)
conn.close()
Ответ 2
Ваш ответ: программа является клиентом, и для подключения требуется сервер. nc
команда create server и ваша программа может подключиться к ней.
[[email protected] work]# nc -l 127.0.0.1 1234 &
[1] 25380
[[email protected] work]# ./socket
Give message: Hello
Hello
Ответ 3
вероятно, не серверный порт 1234 на локальном хосте