全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:1517
推到 Plurk!
推到 Facebook!

no-blocking

尚未結案
雲中鵝
一般會員


發表:14
回覆:24
積分:7
註冊:2004-12-21

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-08-05 00:52:24 IP:140.125.xxx.xxx 未訂閱
請問大大....為什麼我由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

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-08-05 07:22:13 IP:210.64.xxx.xxx 未訂閱
引言: 請問大大....為什麼我由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

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-08-06 15:43:39 IP:140.125.xxx.xxx 未訂閱
嗯.. 在no-blocking中不是以polling的方式來看是否有無資料,連線等...嗎? Try it!
------
Try it!
雲中鵝
一般會員


發表:14
回覆:24
積分:7
註冊:2004-12-21

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-08-11 19:29:54 IP:140.125.xxx.xxx 未訂閱
若不將  
  
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

發送簡訊給我
#5 引用回覆 回覆 發表時間:2005-08-12 07:55:00 IP:211.74.xxx.xxx 未訂閱
還是還沒睡醒。 http://www.lowtek.com/sockets/select.html http://study.99net.net/study/program/vc/1085624537.html 去看看吧。
雲中鵝
一般會員


發表:14
回覆:24
積分:7
註冊:2004-12-21

發送簡訊給我
#6 引用回覆 回覆 發表時間:2005-08-14 22:37:45 IP:140.125.xxx.xxx 未訂閱
謝謝大大的指教. 小弟我確實是沒搞清楚socket.浪費了大大的時間.感到抱歉. 我決定好好地windows socket network programming將這本書看幾章後,再來試試. 本來我買了一本網路程式設計書來看,但因小弟才疏學淺,沒學過windows program.使得看不下去........ 謝謝回答. Try it!
------
Try it!
Ktop_Robot
站務副站長


發表:0
回覆:3511
積分:0
註冊:2007-04-17

發送簡訊給我
#7 引用回覆 回覆 發表時間:2007-04-18 17:32:42 IP:000.000.xxx.xxx 未訂閱
提問者您好:


以上回應是否已得到滿意的答覆?


若已得到滿意的答覆,請在一週內結案,否則請在一週內回覆還有什麼未盡事宜,不然,
將由版主(尚無版主之區域將由副站長或站長)自由心證,選擇較合適之解答予以結案處理,
被選上之答題者同樣會有加分獎勵同時發問者將受到扣 1 分的處分。不便之處,請見諒。


有問有答有結案,才能有良性的互動,良好的討論環境需要大家共同維護,感謝您的配合。

------
我是機器人,我不接受簡訊.
系統時間:2024-05-04 23:07:49
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!