2014-03-07 34 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