2012-02-10 59 views
0

我剛剛開始在c網絡編程。我遵循一個簡單的教程來創建一個接受連接並打印出客戶端發送的消息的服務器。伯克利插座,運行簡單的客戶端和服務器連接

客戶端接受一個參數作爲服務器的地址。

我不知道如何指定服務器的地址?這是我的機器名嗎?

我在一個終端上運行服務器,並嘗試從另一個終端連接。在這裏感謝所有幫助:)

是在打印字符串的結尾服務器代碼

`#include <sys/types.h> 
    #include <sys/socket.h> 
    #include <netinet/in.h> 
    #include <arpa/inet.h> 
    #include<stdio.h> 
    #include <errno.h> 
    #include <stdlib.h> 
    #include <string.h> 
    #include <unistd.h> 

    int main(int argc, char *argv[]) 
    { 
    #define BUFLEN 1500 
    int fd; 
    ssize_t i; 
    ssize_t rcount; 
    char buf[BUFLEN]; 

    printf("test1"); 
    fd = socket (AF_INET,SOCK_STREAM,0); 
    if (fd == -1){ 
     printf("Oh dear, something went wrong with read()! %s\n", strerror(errno)); 
    } 

    struct sockaddr_in addr; 

    addr.sin_addr.s_addr = INADDR_ANY; 
    addr.sin_family = AF_INET; 
    addr.sin_port = htons(500); 

    if (bind(fd, (struct sockaddr *)&addr, sizeof(addr)) == -1) { 
     printf("cannot bind socket"); 
    } 

    if (listen(fd, 20) == -1) { 
     printf("unable to listen"); 
    } 

    int connfd; 
    struct sockaddr_in cliaddr; 
    socklen_t cliaddrlen = sizeof(cliaddr); 


    connfd = accept(fd, (struct sockaddr *) &cliaddr, &cliaddrlen); 
    if (connfd == -1) { 
     printf("unable to accept"); 
    } 




    rcount = read(fd, buf, BUFLEN); 
    if (rcount == -1) { 

    // Error has occurred 
    } 
    for (i = 0; i < rcount; i++) { 
     printf("%c", buf[i]); 
    } 

    }` 
+1

你有沒有試過「localhost」? – iabdalkader 2012-02-10 02:26:14

+0

噢!這就是我認爲,我得到的連接被拒絕,但這可能是另一個問題 – drunkmonkey 2012-02-10 02:45:28

+0

它可能是相同的,你可以發佈相關的服務器代碼? – iabdalkader 2012-02-10 02:53:42

回答

1
printf("test1"); 

你應該加上「\ n」(換行字符),使之立即打印。如果沒有「\ n」,printf()緩衝它的輸出,而你看不到它們。

addr.sin_port = htons(500); 

端口0-1023被稱爲「衆所周知的端口」並保留給系統(root)。您應該使用端口1024或更高的測試程序。將它從500更改爲1500(例如)成功綁定。 (你不會看到錯誤消息「無法綁定套接字」,因爲它沒有「\ n」,如我上面所說的。)

rcount = read(fd, buf, BUFLEN); 

您應該connfd閱讀,而不是FD。隨着這些變化,它爲我工作。 (我使用「telnet localhost 1500」作爲客戶端。)

+0

謝謝,這工作! :) – drunkmonkey 2012-02-10 18:47:41