• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            大家看一下這個問題

            今天在看一本書附的源代碼的時候,發現了一個問題,大家來探討一下:關于Winsock的
            下面是兩個程序,一個是服務器端的程序,不斷在監客戶端的連接
            另外一個是客戶端的程序,試圖連接服務器端
            服務器端的程序代碼:
            int main()
            {
            ?// 創建套節字
            ?SOCKET sListen = ::socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
            ?if(sListen == INVALID_SOCKET)
            ?{
            ??printf("Failed socket() \n");
            ??return 0;
            ?}
            ?
            ?// 填充sockaddr_in結構
            ?sockaddr_in sin;
            ?sin.sin_family = AF_INET;
            ?sin.sin_port = htons(4567);
            ?sin.sin_addr.S_un.S_addr = INADDR_ANY;
            ?
            ?// 綁定這個套節字到一個本地地址
            ?if(::bind(sListen, (LPSOCKADDR)&sin, sizeof(sin)) == SOCKET_ERROR)
            ?{
            ??printf("Failed bind() \n");
            ??return 0;
            ?}
            ?
            ?// 進入監聽模式
            ?if(::listen(sListen, 2) == SOCKET_ERROR)
            ?{
            ??printf("Failed listen() \n");
            ??return 0;
            ?}
            ?
            ?// 循環接受客戶的連接請求
            ?sockaddr_in remoteAddr;
            ?int nAddrLen = sizeof(remoteAddr);
            ?SOCKET sClient;
            ?char szText[] = " TCP Server Demo! \r\n";
            ?while(TRUE)
            ?{
            ??// 接受一個新連接
            ??sClient = ::accept(sListen, (SOCKADDR*)&remoteAddr, &nAddrLen);
            ??if(sClient == INVALID_SOCKET)
            ??{
            ???printf("Failed accept()");
            ???continue;
            ??}
            ??
            ??printf(" 接受到一個連接:%s \r\n", inet_ntoa(remoteAddr.sin_addr));

            ??// 向客戶端發送數據
            ??::send(sClient, szText, strlen(szText), 0);
            ??// 關閉同客戶端的連接
            ??::closesocket(sClient);
            ?}
            ??
            ?// 關閉監聽套節字
            ?::closesocket(sListen);
            ?::MessageBox(NULL,"","",MB_OK);
            ?return 0;
            }
            大家請注意上面的while循環,在不斷監聽客戶端的連接。除非你手動關閉該服務器程序,否則while循環是不會退出的。那么,問題是:關閉套接字的那段代碼始終不會執行(我用MessageBox做了試驗,即使是手動關閉該程序,也不會MessageBox),這樣,是不是會發生資源泄露呢?難道windows會幫你關閉?

            posted on 2006-06-10 20:17 bo 閱讀(871) 評論(3)  編輯 收藏 引用 所屬分類: Network

            評論

            # re: 大家看一下這個問題 2006-06-10 21:42 LOGOS

            程序關閉后,他所占用的內存空間會被系統回收。
            不過我不能確定sListen是否會被關閉  回復  更多評論   

            # re: 大家看一下這個問題 2006-06-11 09:37 從頭再來

            為什么不開一個線程去循環接受客戶的連接請求?目前的情況下,就是關閉了同客戶端的連接,也不會退出while循環的,不退出循環怎么會繼續下面的messagebox()?

              回復  更多評論   

            # re: 大家看一下這個問題 2006-06-11 12:20 cooelaf

            用異步socket AcceptEx來接受連接.  回復  更多評論   

            <2006年3月>
            2627281234
            567891011
            12131415161718
            19202122232425
            2627282930311
            2345678

            導航

            統計

            常用鏈接

            留言簿(4)

            隨筆分類(23)

            隨筆檔案(23)

            URL

            最新隨筆

            搜索

            積分與排名

            最新隨筆

            最新評論

            閱讀排行榜

            評論排行榜

            少妇精品久久久一区二区三区| 久久综合视频网站| 久久久久人妻一区二区三区vr| 久久综合香蕉国产蜜臀AV| 无码AV波多野结衣久久| 久久香蕉国产线看观看乱码| 久久精品无码专区免费 | AV无码久久久久不卡蜜桃| 久久精品天天中文字幕人妻| 久久久久无码中| 久久久久亚洲av无码专区导航 | 精品水蜜桃久久久久久久| 欧美日韩精品久久久免费观看| 浪潮AV色综合久久天堂| 久久狠狠一本精品综合网| 男女久久久国产一区二区三区 | 国产高潮国产高潮久久久91| 久久久久亚洲av成人网人人软件| 久久亚洲精品视频| 无码伊人66久久大杳蕉网站谷歌| 久久国产免费| 一本久久久久久久| 国产成人无码久久久精品一| 综合人妻久久一区二区精品| 久久久久99精品成人片| 国产精品福利一区二区久久| 亚洲精品乱码久久久久久 | 久久久久亚洲AV无码专区网站| 色欲综合久久躁天天躁蜜桃| 久久综合久久美利坚合众国| 久久精品18| 精品久久久久久无码中文字幕 | 久久精品国产亚洲麻豆| 97久久综合精品久久久综合| 亚洲AV无码一区东京热久久| 国产精品99久久久精品无码| 久久亚洲精品国产亚洲老地址 | 久久久久久免费一区二区三区 | 色狠狠久久综合网| 久久亚洲日韩看片无码| 色欲久久久天天天综合网精品|