2013-02-08 35 views
0
#include <iostream> 
#include <WinSock2.h> 
#include <Windows.h> 

using namespace std; 

SOCKET listener,connector; 
SOCKADDR_IN myAddress,remoteAddress; 

int main() 
{ 

初始化窗口爲網絡的服務器設置在編譯時,即使沒有客戶端連接

WSAData wdata; 
WSAStartup(MAKEWORD(2,2),&wdata); 

初始化監聽

ZeroMemory(&listener,sizeof(listener)); 
ZeroMemory(&connector,sizeof(connector)); 
listener = socket(AF_INET,SOCK_STREAM,0); 

分配值結構SOCKADDR_IN不斷打印「連接」 myAddress

myAddress.sin_addr.s_addr = INADDR_ANY; //accept any ip 
myAddress.sin_family = AF_INET;//tcp 
myAddress.sin_port = htons(7000);//changing 7000 port to string with htons method 

綁定監聽套接字和地址指示監聽器哪裏找

if(bind(listener,(LPSOCKADDR)&myAddress,sizeof(listener))) 
{ 
    cout<< "bound"; 
} 
//listen method 
if(listen(listener,1)); 
{ 
cout<<"Waiting"; 
} 
int Size = sizeof(remoteAddress); 

初始化無限循環繼續聽

while(true) 
{ 
    connector = accept(listener,(LPSOCKADDR)&remoteAddress,&Size); 
    //read connection request 
    if(sizeof(connector)< 0) 
    { 
     cout <<"noinfo\n"; 
    } 
} 
} 

代碼犯規秀「無信息」,即使沒有連接的客戶端: O我duno笏我做錯了:(請幫我

+0

感謝球員:杜GUYS幫了我很多:D我愚蠢,如果陳述半結腸是問題:(我可能會noob,但我會學習:),我希望我可以指望你的人再次幫助:D – 2013-02-08 14:39:23

回答

1

當然,它確實。代碼中有很多錯誤:

1)您的connector的大小不能小於0,因此if(sizeof(connector)< 0)檢查總是爲false。改爲使用if(connector == INVALID_SOCKET)

2)在if報表結束取出;因爲否則你的檢查變得毫無意義:

if(bind(listener,(LPSOCKADDR)&myAddress,sizeof(listener))) {...} 
if(listen(listener,1)) {...} 

附:發佈剩餘的代碼,我相信還有很多其他的錯誤正在等待被發現。

0

你的代碼是正確的但你必須填寫與零不是插槽

ZeroMemory(&myAddress,sizeof(myAddress)); 

而且分號結構myAddress後,有條件的聲明是沒有用

相關問題