11

ソケット (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) をリッスンしていました ...

4

3 に答える 3

14

マニュアルページによると:

ECONNREFUSED リモートアドレスを聞いている人はいません。


接続を受け入れて受信したデータを送り返す単純なリモート エンドポイント (エコー サーバー) を提供するには、次のpython サーバーのようなものを試すことができます(または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()
于 2013-01-15T18:55:57.763 に答える
5

あなたの答えは次のとおりです。プログラムはクライアントであり、接続するにはサーバーが必要です。ncコマンド create server と、プログラムがそれに接続できます。

[root@mg0008 work]# nc -l 127.0.0.1 1234 &
[1] 25380
[root@mg0008 work]# ./socket
Give message: Hello
Hello
于 2013-01-15T19:02:49.383 に答える
2

おそらく、ローカル ホストにポート 1234 をリッスンするサーバーがありません

于 2013-01-15T18:49:36.907 に答える