雲中鵝
一般會員
發表:14 回覆:24 積分:7 註冊:2004-12-21
發送簡訊給我
|
請問大大....為什麼我由client端connect時,它的select還是沒有傳回值呢?
//server.cpp
#include
#pragma hdrstop
#include using namespace std;
#pragma argsused
int main(int argc, char* argv[])
{
fd_set fdread,fdwrite;
FD_ZERO(&fdread);
FD_ZERO(&fdwrite);
int ret,clientaddrlen;
unsigned long u1=1;
WSADATA wsadata ;
SOCKET listensock;
SOCKET newconnect;
SOCKADDR_IN server;
SOCKADDR_IN client;
timeval time;
time.tv_sec =5;
time.tv_usec =5000;
ret=WSAStartup(MAKEWORD(2,2),&wsadata);
if(ret==INVALID_SOCKET)
{
cout<<"error";
}
listensock=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
ret=ioctlsocket(listensock,FIONBIO,(unsigned long*)&u1);
if (ret == SOCKET_ERROR)
{
cout<<"socket failed:"<0)
{
if(FD_ISSET(listensock,&fdread))
{
newconnect=accept(listensock,(SOCKADDR*)&client,&clientaddrlen);
if (newconnect == INVALID_SOCKET)
{
cout<<"accept failed: %d\n"<< WSAGetLastError();
return -1;
}
} }
}
return 0;
}
//client.cpp
#pragma hdrstop
#include
#include
#pragma argsused
int main(int argc, char* argv[])
{
WSADATA data; //for about the winsocket information
SOCKET client;
SOCKADDR_IN serveraddr;
int port=32;
WSAStartup(MAKEWORD(2,2),&data);//load dll
client=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);//to set about //client socket
// to set server informatiion
serveraddr.sin_family =AF_INET;
serveraddr.sin_port =port;
serveraddr.sin_addr.s_addr =inet_addr("140.125.33.181"); //to connect the server;
connect(client,(SOCKADDR*)&serveraddr,sizeof(serveraddr)); int ret=send(client,"12345",5,0);
closesocket(client);
WSACleanup();
return 0;
}
Try it!
------ Try it!
|
暗黑破壞神
版主
發表:9 回覆:2301 積分:1627 註冊:2004-10-04
發送簡訊給我
|
引言:
請問大大....為什麼我由client端connect時,它的select還是沒有傳回值呢?
[ccode]
while(1)
{
FD_ZERO(&fdread);
FD_SET(listensock,&fdread);
FD_SET(listensock,&fdwrite);
if((ret=select(0,&fdread,&fdwrite,NULL,&time))==SOCKET_ERROR)
{
cout<<("error");
}
}
[/code]
還沒睡醒。沒仔細看。
只覺得紅色部份為什麼在 while 之中。
|
雲中鵝
一般會員
發表:14 回覆:24 積分:7 註冊:2004-12-21
發送簡訊給我
|
嗯..
在no-blocking中不是以polling的方式來看是否有無資料,連線等...嗎? Try it!
------ Try it!
|
雲中鵝
一般會員
發表:14 回覆:24 積分:7 註冊:2004-12-21
發送簡訊給我
|
若不將
FD_ZERO(&fdread);
FD_SET(listensock,&fdread);
FD_SET(listensock,&fdwrite);
放在while中..也是會發生錯誤,( 10022 Invalid argument Pragma Socket Erro)
雖然我看其他的書.也沒有放在while中..可是如何我放進去,則只有一次可以,但仍然不能測到有信號. 謝謝回答 Try it!
------ Try it!
|
暗黑破壞神
版主
發表:9 回覆:2301 積分:1627 註冊:2004-10-04
發送簡訊給我
|
還是還沒睡醒。
http://www.lowtek.com/sockets/select.html http://study.99net.net/study/program/vc/1085624537.html 去看看吧。
|
雲中鵝
一般會員
發表:14 回覆:24 積分:7 註冊:2004-12-21
發送簡訊給我
|
謝謝大大的指教.
小弟我確實是沒搞清楚socket.浪費了大大的時間.感到抱歉.
我決定好好地windows socket network programming將這本書看幾章後,再來試試.
本來我買了一本網路程式設計書來看,但因小弟才疏學淺,沒學過windows program.使得看不下去........ 謝謝回答. Try it!
------ Try it!
|
Ktop_Robot
站務副站長
發表:0 回覆:3511 積分:0 註冊:2007-04-17
發送簡訊給我
|
提問者您好:
以上回應是否已得到滿意的答覆?
若已得到滿意的答覆,請在一週內結案,否則請在一週內回覆還有什麼未盡事宜,不然, 將由版主(尚無版主之區域將由副站長或站長)採自由心證,選擇較合適之解答予以結案處理, 被選上之答題者同樣會有加分獎勵,同時發問者將受到扣 1 分的處分。不便之處,請見諒。
有問有答有結案,才能有良性的互動,良好的討論環境需要大家共同維護,感謝您的配合。
------ 我是機器人,我不接受簡訊.
|