2014-03-07 45 views
1

我在寫一個基本的hello世界網絡程序,但是當我在客戶端調用write時,程序停止。有誰知道爲什麼發生這種情況?該函數不返回任何內容:寫入套接字退出程序

const char* msg = "Hello World!\n"; 
char buffer[256]; 
int sockfd, n; 
struct sockaddr_in srv_ip4; 
struct hostent* server; 

puts ("a"); 
sockfd = socket (AF_INET, SOCK_STREAM, 0); 
if (sockfd < 0) { 
    perror ("Unable to open socket"); 
    return false; 
} 

puts ("b"); 
server = gethostbyname (addr); 
if (!server) { 
    fprintf (stderr, "Unable to find host: %s\n", addr); 
    return false; 
} 
memset (&srv_ip4, 0, sizeof (struct sockaddr_in)); 

puts ("c"); 
srv_ip4.sin_family = AF_INET; 
memcpy (&srv_ip4.sin_addr.s_addr, server->h_addr, server->h_length); 
srv_ip4.sin_port = htons (PORT); 

puts ("d"); 
n = write (sockfd, msg, 13); 
if (n < 0) { 
    puts ("Why?"); 
    perror ("Unable to write to socket"); 
    return false; 
} 
memset (buffer, 0, 256); 

puts ("e"); 
n = read (sockfd, buffer, 255); 
if (n < 0) { 
    perror ("Unable to read from socket"); 
    return false; 
} 
printf ("%s", buffer); 

puts ("f"); 
close (sockfd); 

return true; 

輸出是:

A B C d

+0

程序是否掛起或終止? – deviantfan

+0

程序終止。 – para

+0

「sockfd」聲明在哪裏,它與哪裏連接? –

回答

4

你應該connect到服務器之前發送數據。

通過this article

+0

不過,他應該得到-1和errno。爲什麼他的程序不打印「爲什麼?」和perror? – slim

+0

我打賭別的地方他有指針問題,因此UB – deviantfan