gpt4 book ai didi

c++ - C++ int 的值神秘变化

转载 作者:行者123 更新时间:2023-11-30 00:52:20 26 4
gpt4 key购买 nike

所以我正在编写一个 c++ 类来使 c 中的 unix 套接字更容易一些。但是,每次我运行它都无法连接。端口的值在程序中途发生变化。这是包含该类的头文件:

#ifndef __Sockets__CHSocket__
#define __Sockets__CHSocket__
class Sock {
int port;
char host[16];
int sock,maxLen;
int bytes;
long nHostAddress;
struct hostent* pHostInfo;
struct sockaddr_in dest;

public:
Sock(int dom, int type);
int connct(const char *host, int port);
int bnd(const char *addr, int port);
int lstn(int port);
int snd(const char *toSend);
int sndto(const char *msg, const char *dst);
char* recv(int length);
int accpt(int s, struct sockaddr *addr, socklen_t *addrlen);
int clse();
};
#endif /* defined(__Sockets__CHSocket__) */

这里是 CHSocket.cpp(缩短为实际运行的内容):

// Constructor definition
Sock::Sock(int dom, int type)
{
bzero(&dest, sizeof(dest));
if ((sock=socket(dom, type, 0)<0)) {
cerr << "[!] Failed to create socket!;";
}
dest.sin_family=dom;
memset(&dest, 0, sizeof(dest));
}

// Connect definition
int Sock::connct(const char *host, int port)
{
char theHost[sizeof(host)];
strcpy(theHost, host);
pHostInfo=gethostbyname(theHost);
memcpy(&nHostAddress,pHostInfo->h_addr,pHostInfo->h_length);

dest.sin_addr.s_addr=nHostAddress;
dest.sin_port = htons(port);
if (connect(sock, (struct sockaddr *)&dest, sizeof(dest)) < 0)
{
cerr << "[!] Failed to connect socket!";
return -1;
}
else
{
return 0;
}
return 0;
}

这是main.cpp:

int main()
{
Sock test = Sock(AF_INET, SOCK_STREAM);
test.connct("127.0.0.1", 3000);
test.clse();
}

我在 osx 10.8 上使用 xcode 5。当我运行该程序时,它告诉我它无法连接。我在连接函数的开头和定义 pHostInfo 的行中放置了一些断点。在第一个断点,端口值是3000,在第二个,是49。这与连接问题有关吗?

更新:

程序现在运行,但它给了我以下输出:

[!] Failed to connect socket!Program ended with exit code: 0

这是它在连接套接字失败时所做的事情。我有 netcat 监听端口 3000,我从另一个窗口成功连接。有什么想法可能是什么问题吗?

最佳答案

char theHost[sizeof(host)];

该行分配了足够的字节来存储 host 的大小,这是一个指向 char 的指针,它可能是 8。然后它会覆盖端口号,因为你没有足够的内存分配在堆栈上。您可能需要以下内容:

char *theHost = new char[strlen(host)+1]

然后在构造函数返回之前释放该内存:

delete [] theHost;

或者,您可以在调用 gethostbyname()

时直接使用 host 参数,这样更简单也更好

编辑:(按照建议添加释放)

关于c++ - C++ int 的值神秘变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19328731/

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