我收到的错误为bind()
,其值为34
(结果太大),有人可以帮忙吗?
void Connect(string address, unsigned short port){
memset(&server2, 0, sizeof(server2));
server2.sin_family = AF_INET;
server2.sin_addr.s_addr = inet_addr(address.c_str());
server2.sin_port = htons(port);
desc2 = ::socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if(desc2 == -1) {
cout << "Error in Socket()" << endl;
}
if((::bind(desc2,(sockaddr*)&server2, sizeof(server2))) == -1) {
cout << "Error in Bind() " << errno << endl;
}
if((::connect(desc2, (sockaddr*)&server2, sizeof(server2))) > 0) {
cout << "Error in Connect()" << endl;
}
cout << "YOU ARE CONNECTED TO " << address << " ON PORT " << port << endl;
}
PS:我在1年前也遇到了这个错误,问题很简单我在初始化套接字地址时写了一些不好的东西,在哪里连接,但现在我再也不知道我犯了哪个错误。
答案 0 :(得分:0)
我不知道为什么你得到'名字太长' - 没有看到server2
如何被宣布和定义,就不可能确定。
但我做知道在具有相同地址的同一套接字上调用bind()
然后调用connect()
将失败 - bind()
正在分配本地地址到套接字,connect()
连接到远程地址。为套接字的两端提供相同的地址只能结束。
bind()
之前几乎没有协议需要connect()
。 (例外情况将涉及“低于1024的端口只能通过root打开,因此我们可以信任此连接”的身份验证方式,这种方式尚未使用多年。请考虑rlogin
。)
bind()
电话之前, listen()
最有意义。客户端将尝试联系“众所周知的端口”上的服务器,bind()
是您用于分配该名称的机制。
答案 1 :(得分:0)
我不知道究竟是什么原因导致您的问题返回该类型的结果。
您说您是代理服务器,因此您正在侦听传入连接。 试试这个:
server2.sin_addr.s_addr = 0;
server2.sin_family = AF_INET;
server2.sin_port = htons(port);
desc2 = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
// Puts the socket in listening mode, allowing 10 connection requests to queue.
bind(desc2, (sockaddr*)&server2, sizeof(server2));
listen(desc2, 10);
// Accepts the first connection request.
SOCKET accepted_socket = accept(desc2, NULL, NULL);
std::cout << "connection accepted!\n";
您可能希望学习如何异步编程。