2013-01-15 22 views
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); 
} 

EDITもちろん


は、ここに私のコードです!実際にサーバーにエラーがありました。私はクライアントがメッセージを送ったことをうまく見つけたので、私は自分の見解を狭め、サーバーを振り返ってみることもできませんでした。

エラーが私のサーバーにもあるように思われるので、私は別の質問をして終わるかもしれないし、ここにリンクする

Serverは(12345)を聞いていた...

+2

ポート1234でリッスンするプログラムを作成しましたか?前にnc -l 127.0.0.1 1234を実行してリスナーを作成してみてください。 – fuz

答えて

10

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() 
2

おそらくいないサーバーのリスニングman pageによると、ローカルホストでポート1234

+0

どうすれば解決できますか?私は大麦がこのようなもののいくつかを理解しています – Kalec

+0

クライアントを実行する前に、プログラム、つまり "サーバー"がポート1234を受信し、ローカルボックスで実行する必要があります。 –

4

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

[[email protected] work]# nc -l 127.0.0.1 1234 & 
[1] 25380 
[[email protected] work]# ./socket 
Give message: Hello 
Hello 
関連する問題