gpt4 book ai didi

C++ INET 菜鸟,段错误

转载 作者:行者123 更新时间:2023-11-30 21:04:33 25 4
gpt4 key购买 nike

这个问题不太可能帮助任何 future 的访客;它仅与一个小地理区域、一个特定时刻或一个非常狭窄的情况相关,而这些情况通常不适用于互联网的全局受众。如需帮助使这个问题更广泛地适用,visit the help center .




9年前关闭。



#include <iostream>
#include <stdlib.h>
#include <stdio.h>
#include <netinet/in.h>
#include <netdb.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <string.h>
#include <cstdio>

using namespace std;

int main(int argc, char *argv[])
{
int port, n,sockfd;
struct sockaddr_in srv_addr;
struct hostent *serv;

char buffer[256];

if(argc<3) {
cout <<"\n ussage: host port\nexiting\n";
return 0;
}

port = atoi(argv[2]);
sockfd = socket(AF_INET, SOCK_STREAM, 0);

if (sockfd < 0) {
cout <<"\nsocket creation on"<<port<<" failed\nexiting\ncheck to see if port is in use";
return 0;
}

serv = gethostbyname(argv[1]);

if (serv=NULL) {
cout << "\n" << serv << " is not a valid host name\nexiting";
return 0;
}

bzero((char *) &srv_addr, sizeof(srv_addr));

srv_addr.sin_family = AF_INET;

bcopy((char *) serv->h_addr, (char *) &srv_addr.sin_addr.s_addr, serv->h_length);

srv_addr.sin_port=htons(port);
if (connect(sockfd,(sockaddr*)&srv_addr, sizeof (srv_addr)) < 0) {
cout << " \nconnection failed\n";}
return 0;
}

cout << "\nType message\n";

bzero(buffer, 256);

cin.getline(buffer,256);

n = write(sockfd,buffer,strlen(buffer));
if (n>0) {
cout <<"\nsocket write error\nexiting\n";
}

n = read(sockfd,buffer,255);
if (n>0) {
cout << "\nsocket read error\nexiting\n";
}

cout << buffer;
return 0;
}

由于 Arrowdodger 的一些帮助,现在可以编译代码,但现在我遇到了段错误。我试着把 cout <<"1"语句来查看它在程序中的哪个位置尝试将内存写入错误的位置,但在 int main() 之后最终尝试它之后,打印前还是会报错 1到屏幕。我知道这可能是一个非常简单的问题,但我又一次被难住了。这不仅是我的第一个 INET 代码,也是我的第一个套接字代码。

最佳答案

排队

if (serv=NULL) {

你设置 servNULL而不是将其与 NULL 进行比较.

我强烈建议您学习如何使用调试器。在 gdb 中运行这个程序会立即显示你的段错误的位置:
bcopy((char *) serv->h_addr, (char *) &srv_addr.sin_addr.s_addr, serv->h_length);

你会发现 serv当你没想到它时,它是 NULL 。

在这里发布您的代码并期望数百人为您校对它在短期内对他们来说是浪费时间,从长远来看对您来说是浪费时间。

关于C++ INET 菜鸟,段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9847787/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com