2013-07-11 72 views
1

我是unix套接字編程的新手。我還沒有發現自己是一本舒適的書或教程,所以我真的很掙扎。C socket編程 - printf不會在屏幕上打印任何東西

下面是程序代碼:

#include<stdio.h> 
#include<sys/socket.h> 
#include<sys/types.h> 
#include <netinet/in.h> 

int main(){ 

    printf("one"); 
    int socketHandle, newSocketHandle, portno; 
    struct sockaddr_in serverAddress, clientAddress; 


    printf("two"); 


    portno = 5001; 
    bzero((char *) &serverAddress, sizeof(serverAddress)); 
    serverAddress.sin_family = AF_INET; 
    serverAddress.sin_addr.s_addr = INADDR_ANY; 
    serverAddress.sin_port = htons(portno); 

    printf("three"); 

    //creating the socket 
    socketHandle = socket(AF_INET, SOCK_STREAM, 0); 
    if(socketHandle < 0){ 
     perror("ERROR : Socket not created."); 
     return -1; 
    } 
    printf("Socket created."); 





    //binding the socket 
    if(bind(socketHandle, (struct sockaddr *) &serverAddress, sizeof(serverAddress)) < 0){ 
     perror("ERROR : Socket not binded."); 
     return -1; 
    } 
    printf("Socket binded."); 

    //make the socket listen 
    listen(socketHandle, 5); 

    int len = sizeof(clientAddress); 
    //accept the connection requests 
    newSocketHandle = accept(socketHandle, (struct sockaddr *) &clientAddress, &len); 
    if(newSocketHandle < 0){ 
     perror("ERROR : Connection not accepted."); 
    } 

    printf("Connection accepted."); 
    return 0; 
} 

(我試圖打印onetwo,並且three調試)

但是,即使是printf("one")在第一行不起作用。 光標只是閃爍(表示程序仍在執行中)。我甚至無法得知上述程序中出現問題的線索。使用bzero()功能也拋出一個警告說

warning: incompatible implicit declaration of built-in function ‘bzero’ [enabled by default] 

我覺得socket編程困難,因爲不同的網站表現出不同的代碼。另外,請提供任何關於C/C++套接字編程的好教程。

+0

'serverAddress'未初始化。您正試圖綁定到一個隨機地址。顯然,這失敗了。 – wildplasser

+0

@wildplasser我添加了第二個代碼片段試圖做到這一點。 – Kevin

+0

對不起,我很難讀出序列碼。順便說一句:我沒有在代碼中的任何地方看到'bzero()'。 – wildplasser

回答

5

確保打印換行符在你的調試消息爲他們立即顯示。

printf("one\n");

如果你真的不想換行,則可以改爲沖水輸出與fflush(stdout);