Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 写入套接字退出程序_C_Linux_Sockets - Fatal编程技术网

C 写入套接字退出程序

C 写入套接字退出程序,c,linux,sockets,C,Linux,Sockets,我正在编写一个基本的hello world网络程序,但是当我在客户端调用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);

我正在编写一个基本的hello world网络程序,但是当我在客户端调用
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;
const char*msg=“你好,世界!\n”;
字符缓冲区[256];
int-sockfd,n;
srv_ip4中的结构sockaddr_;
结构主机*服务器;
认沽权(“a”);
sockfd=套接字(AF_INET,SOCK_STREAM,0);
if(sockfd<0){
perror(“无法打开插座”);
返回false;
}
认沽权(“b”);
服务器=gethostbyname(地址);
如果(!服务器){
fprintf(stderr,“找不到主机:%s\n”,addr);
返回false;
}
memset(&srv_ip4,0,sizeof(struct sockaddr_in));
看跌期权(“c”);
srv_ip4.sin_系列=AF_INET;
memcpy(&srv_ip4.sin_addr.s_addr,server->h_addr,server->h_length);
srv_ip4.sin_端口=htons(端口);
看跌期权(“d”);
n=写入(sockfd,msg,13);
if(n<0){
提出(“为什么?”);
perror(“无法写入套接字”);
返回false;
}
内存集(缓冲区,0,256);
认沽权(“e”);
n=读取(sockfd,缓冲区,255);
if(n<0){
perror(“无法从套接字读取”);
返回false;
}
printf(“%s”,缓冲区);
认沽权(“f”);
关闭(sockfd);
返回true;
输出为:

a、b、c、d

您应该在发送数据之前将其发送到服务器


Via.

程序是否挂起或终止?程序终止。“sockfd”在何处声明,它在何处连接?程序的其余部分在何处?请发布一个完整的程序,我们可以运行它来演示错误,而不是一个代码片段。你的调试器怎么说?不过,他应该得到一个-1和一个errno。为什么他的程序不打印“为什么?”和perror?我打赌他在别的地方有指针问题,因此