【问题标题】:Socket error: connection refused - what am I doing wrong?套接字错误:连接被拒绝 - 我做错了什么?
【发布时间】:2013-01-15 18:45:40
【问题描述】:

我刚刚开始学习套接字 (Linux) 的基础知识。我尝试了一个小例子,但它不起作用,我不知道出了什么问题。

我收到“连接被拒绝”错误消息。


这是我的代码:

#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) ...

【问题讨论】:

  • 你写了一个监听1234端口的程序吗?尝试执行 nc -l 127.0.0.1 1234 之前有一个监听器。

标签: c linux sockets


【解决方案1】:

根据man page

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 命令创建服务器,您的程序可以连接到它。

    [root@mg0008 work]# nc -l 127.0.0.1 1234 &
    [1] 25380
    [root@mg0008 work]# ./socket
    Give message: Hello
    Hello
    

    【讨论】:

      【解决方案3】:

      您的本地主机中可能没有服务器侦听端口 1234

      【讨论】:

      • 我该如何解决呢?我大麦了解其中的一些东西
      • 在运行客户端之前,您需要编写一个程序,即“服务器”侦听端口 1234,并在本地机器中运行它。
      猜你喜欢
      • 2019-12-22
      • 2014-04-23
      • 1970-01-01
      • 2016-01-31
      • 2015-08-26
      • 2013-12-19
      • 1970-01-01
      • 2020-10-18
      • 1970-01-01
      相关资源
      最近更新 更多