2013-01-15 5 views
11

Tôi vừa mới bắt đầu học những điều cơ bản về ổ cắm (Linux). Tôi đã thử dùng một ví dụ nhỏ, nhưng nó không hoạt động và tôi không biết có gì sai.Lỗi ổ cắm: kết nối bị từ chối - tôi đang làm gì sai?

Tôi nhận được thông báo lỗi "Đã kết nối bị từ chối".


Dưới đây là mã của tôi:

#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

Dĩ nhiên! lỗi thực sự nằm trong máy chủ. Tôi đơn giản thấy rằng chúng tôi đã mệt mỏi vì khách hàng đã gửi tin nhắn, vì vậy tôi đã thu hẹp tầm nhìn của mình, thậm chí không hề lo lắng khi nhìn lại máy chủ.

Kể từ khi lỗi có vẻ là cũng trong máy chủ của tôi, tôi có thể kết thúc hỏi một câu hỏi khác và liên kết nó ở đây

Server đã được nghe (12345) ...

+2

Bạn có viết chương trình nghe trên cổng 1234 không? Hãy thử thực hiện nc -l 127.0.0.1 1234 trước để có một người nghe. – fuz

Trả lời

10

Theo man page:

ECONNREFUSED No-one listening on the remote address.


Để cung cấp một thiết bị đầu cuối từ xa đơn giản mà chấp nhận kết nối của bạn và gửi lại các dữ liệu nhận được (echo server), bạn có thể thử một cái gì đó như thế này python server (hoặc sử dụng 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

lẽ không có máy chủ nghe cổng 1234 trong host nội bộ của bạn

+0

Và làm thế nào tôi có thể giải quyết điều đó? Tôi lúa mạch hiểu một số công cụ này – Kalec

+0

bạn sẽ cần viết một chương trình, tức là "máy chủ" lắng nghe cổng 1234 và chạy nó trong hộp địa phương của bạn trước khi bạn chạy ứng dụng khách. –

4

trả lời của bạn là : Chương trình của bạn là máy khách và nó cần một máy chủ để kết nối. nc lệnh tạo máy chủ và chương trình của bạn có thể kết nối với nó.

[[email protected] work]# nc -l 127.0.0.1 1234 & 
[1] 25380 
[[email protected] work]# ./socket 
Give message: Hello 
Hello