套接字错误:连接被拒绝 - 我做错了什么?
我刚开始学习套接字(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)...
按照man page:
ECONNREFUSED No-one listening on the remote address.
为了提供接受你的连接,并发送回接收到的数据(回声服务器)一个简单的远程端点,你可以尝试这样的事情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()
大概没有服务器侦听端口1234在本地主机
我该如何解决这个问题?我大麦了解这些东西 – Kalec
您需要编写一个程序,即监听端口1234的“服务器”,并在运行客户端之前在本地盒子中运行它。 – 2013-01-15 19:02:32
你的答案是:你的程序是客户端,它需要一个服务器来连接。 nc
命令创建服务器,您的程序可以连接到它。
[[email protected] work]# nc -l 127.0.0.1 1234 &
[1] 25380
[[email protected] work]# ./socket
Give message: Hello
Hello
您是否编写了侦听端口1234的程序?尝试执行nc -l 127.0.0.1 1234以获取侦听器。 – fuz