2011-02-04 37 views
-1

我得到一个错误bind()与值34(结果太大),任何人都可以帮忙吗?结果太大C++ sockets

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

它的点符号,如果它像一个域,它的工作....奇怪的 – Kobe 2011-02-04 02:27:19

+0

指出一个错误:连接返回0成功,使用`== 0`。我也将-1更改为`SOCKET_ERROR` – Marlon 2011-02-04 02:28:00

+0

我同时设置为SOCKET_ERROR。顺便说一句,我真的需要在连接时调用绑定,或者只有当我正在监听连接(服务器部分)时? – Kobe 2011-02-04 02:32:09

回答

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"; 

你可能会想学习如何编程异步。

0

我不知道为什么你得到'名字太长' - 没有看到server2是如何声明和定义的,这是不可能的。

但我知道调用bind(),然后用同一个地址同一插座上connect()会失败 - bind()被分配本地地址到插座,并connect()连接到远程地址。为套接字的两端提供相同的地址只能结束。

connect()之前几乎没有协议要求bind()。 (例外情况涉及“端口号低于1024只能由root打开,所以我们可以信任这种连接”的认证方式,这种认证方式在很长时间内还没有被使用过。在拨打listen()之前。客户端将尝试联系“知名端口”上的服务器,bind()是您用来分配该名称的机制。