• <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>

            牽著老婆滿街逛

            嚴以律己,寬以待人. 三思而后行.
            GMail/GTalk: yanglinbo#google.com;
            MSN/Email: tx7do#yahoo.com.cn;
            QQ: 3 0 3 3 9 6 9 2 0 .

            Windows下與Linux下編寫socket程序的區別

            【【Windows】】

            【Windows: 頭文件的區別】

            #include<winsock.h>
            #include
            <winsock2.h>


            【Windows: 初始化的區別】

            WSADATA wsaData;
            WSAStartup(
            0x202,&wsaData);


            【Windows: 聲明Socket】
            SOCKET類型


            【Windows: Socket關閉】
            closesocket()


            【Windows: Socket操作錯誤返回值】
            SOCKET_ERROR


            【Windows: 設置socket非阻塞】

            ioctlsocket(server_socket,FIONBIO,&ul);


            【Windows: WSA宏】
            WSA相關的操作


            【Windows: Select()函數】
            Select()函數的第一個參數無效,寫0就可以了。


            【Windows: 編譯連接】
            Ws2_32.lib


            【Windows: 錯誤捕捉】
            WSAGetLastError() 或者 GetLastError().


            【Windows: 異常處理】
            沒有對send()的異常處理,最后一個參數無效,寫0就可以了。


            【Windows: sockaddr_in結構】

            addr_var.sin_addr.S_un.S_addr

            Winsock里最后那個32bit的S_addr也有幾個以聯合(Union)的形式與它共享內存空間的成員變量(便于以其他方式賦值).
            遇到那種得到了是4個char的IP的形式(比如127一個,0一個,0一個和1一個共四個char),WinSock可以直接用4個S_b來賦值到S_addr里.


            【【Linux】】

            【Linux: 頭文件的區別】

            #include <netinet/in.h> //大部分都在這兒
            #include <unistd.h> // close函數在這兒
            #include <sys/socket.h> // 在in.h里已經包含了,可以省了
            #include <errno.h> // 錯誤處理
            #include <sys/types.h> // 系統類型定義


            【Linux: 初始化的區別】
            啥都不用做

            【Linux: 聲明Socket】
            SOCKET類型在Linux中沒有定義,直接用int即可。


            【Linux: Socket關閉】
            close()


            【Linux: Socket操作錯誤返回值】
            在Linux中沒有定義,判斷socket操作是否成功可用返回值是否為-1即可,可將SOCKET_ERROR聲明為-1。


            【Linux: 設置socket非阻塞】
            ioctlsocket在Linux中沒有定義,用fcntl替代即可,但要包含fcntl.h頭文件。

            #include<fcntl.h>
            fcntl(server_socket,F_SETFL, O_NONBLOCK);

             

            【Linux: WSA宏】
            WSA相關的操作在Linux不必要,直接去掉即可。


            【Linux: Select()函數】
            Select()函數的第一個參數必須是后幾個參數用到的socket中,值最大的數(整型)加1。


            【Linux: 編譯連接】
            連接是使用參數:-lstdc
            運行時需要libstdc++.so.5,可在/usr/lib目錄中創建一個鏈接。


            【Linux: 錯誤捕捉】

            #include <errno.h>
            extern int errno;
            int geterror(){return errno;}

             

            【Linux: 異常處理】
            當連接斷開,還發數據的時候,不僅send()的返回值會有反映,而且還會像系統發送一個異常消息,如果不作處理,系統會出BrokePipe,程序會退出。為此,send()函數的最后一個參數可以設MSG_NOSIGNAL,禁止send()函數向系統發送異常消息。 


            【Linux: sockaddr_in結構】
            addr_var.sin_addr.s_addr
            Linux的Socket沒有這個聯合,就是一個32bit的s_addr。
            遇到那種得到了是4個char的IP的形式(比如127一個,0一個,0一個和1一個共四個char),在Linux下,可以用邊向左移位(一下8bit,共四下)邊相加的方法賦值。

            posted on 2010-06-10 23:41 楊粼波 閱讀(1625) 評論(0)  編輯 收藏 引用

            精品熟女少妇AV免费久久| 久久亚洲精品无码VA大香大香| 欧美精品福利视频一区二区三区久久久精品 | 亚洲欧美精品一区久久中文字幕 | 久久精品国产清自在天天线 | 久久青青色综合| 久久笫一福利免费导航 | 色偷偷久久一区二区三区| 亚洲va中文字幕无码久久不卡| 久久亚洲AV无码精品色午夜麻豆| 亚洲欧洲久久久精品| 久久婷婷五月综合色奶水99啪| 久久天天躁狠狠躁夜夜不卡| 久久精品桃花综合| 亚洲午夜久久久影院伊人| 无码精品久久久久久人妻中字| 久久永久免费人妻精品下载| 日本精品久久久久中文字幕| 久久久久国产一区二区| 亚洲欧美一级久久精品| 久久精品国产色蜜蜜麻豆| 国产麻豆精品久久一二三| 热久久国产精品| 狠狠色丁香久久婷婷综合蜜芽五月 | 日本免费一区二区久久人人澡| 久久黄视频| 久久亚洲精品国产精品| 亚洲国产精品婷婷久久| 一日本道伊人久久综合影| 国产精品一久久香蕉国产线看观看| 91精品国产91热久久久久福利| 亚洲国产成人乱码精品女人久久久不卡| 成人久久免费网站| 大蕉久久伊人中文字幕| 99久久国产亚洲综合精品| 国产精品久久自在自线观看| 亚洲婷婷国产精品电影人久久 | 久久精品国产亚洲综合色| 国产精品久久久久久久久久影院| 99久久免费国产特黄| 久久99九九国产免费看小说|