C 写入套接字退出程序
我正在编写一个基本的hello world网络程序,但是当我在客户端调用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);
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?我打赌他在别的地方有指针问题,因此