青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

興海北路

---男兒仗劍自橫行
<2008年8月>
272829303112
3456789
10111213141516
17181920212223
24252627282930
31123456

統(tǒng)計(jì)

  • 隨筆 - 85
  • 文章 - 0
  • 評論 - 17
  • 引用 - 0

常用鏈接

留言簿(6)

隨筆分類

隨筆檔案

收藏夾

全是知識啊

搜索

  •  

最新評論

閱讀排行榜

評論排行榜

《windows網(wǎng)絡(luò)編程技術(shù)》之 Winsock基礎(chǔ) - [技術(shù)補(bǔ)鈣]
轉(zhuǎn)自http://xiekeli.blogbus.com/logs/4019775.html

前段時(shí)間根據(jù)客服的反映,老翁的前置機(jī)程序存在不工作的情況,初步表現(xiàn)為GPRS登錄失敗,我查看了報(bào)文(強(qiáng)烈要求老板發(fā)獎(jiǎng)金,有什么問題我總 是沖鋒在前)發(fā)現(xiàn)基本出現(xiàn)在網(wǎng)絡(luò)頻繁斷開的情況后(網(wǎng)絡(luò)每隔10分鐘被斷開一次,socket錯(cuò)誤10053,什么原因還不得而知)。忘了說了,前置機(jī)是 通過TCP連接到省局的GPRS代理服務(wù)器(是由小賴開發(fā)的)然后和現(xiàn)場的終端進(jìn)行通信。前置機(jī)程序中是通過delphi的clientsocket進(jìn)行 連接的。一下子還真不知道是什么原因。對于socket這塊我絕對不是專家,知其然,不知其所以然。于是我決定先從清理基本概念開始:
鳥瞰TCP/IP體系結(jié)構(gòu) 
首先從TCP/IP體系結(jié)構(gòu)開始(這也是不少公司面試時(shí)的必備良題啊),相信下圖已經(jīng)表達(dá)得非常清除了
其次是winsocket與tcp/ip(其實(shí),不止TCP/IP協(xié)議族,這里只討論TCP/IP) 
TCP/IP協(xié)議核心與應(yīng)用程序關(guān)系圖。

最后是常用協(xié)議特性:
 關(guān)于定址
Winsock中,通過SOCKADDR_IN結(jié)構(gòu)來描述IP地址和服務(wù)端口:
struct sockaddr_in
{
      short                             sin_family;
      u_short                         sin_port;
      struct in_addr               sin_addr;
      char                              sin_zero[8];
};
哦,我只關(guān)心IP協(xié)議,所以sin_family = AF_INET;
關(guān)于端口要注意哦,0-1023為固定服務(wù)保留的(別打他們的注意了);1024-49151供普通用戶的普通用戶進(jìn)程使用;49152-65535是動(dòng)態(tài)和私有端口。
幾個(gè)特殊地址:
  INADDR_ANY:允許服務(wù)器應(yīng)用監(jiān)聽主機(jī)上每個(gè)網(wǎng)絡(luò)接口上的客戶機(jī)活動(dòng);
  INADDR_BROADCAST用于在一個(gè)IP網(wǎng)絡(luò)中發(fā)送廣播UDP數(shù)據(jù)報(bào)。
字節(jié)排序:
從主機(jī)字節(jié)順序---> 網(wǎng)絡(luò)字節(jié)順序
返回四字節(jié),用于IP地址
u_long htonl(u_long hostlong)
int WSAHtonl(
        SOCKET s,
        u_long hostlong,
        u_long FAR * lpnetlong
);
返回兩字節(jié),用于端口號
u_short htons(u_short hostshort);
int WSAHtons(
      SOCKET s,
      u_short hostshort,
      u_short FAR * lpnetshort
); 
對應(yīng)的反向函數(shù):
u_long ntohl(u_long netong)
int WSANtohl(
        SOCKETs,
        u_long netong,
        u_long FAR * lphostlong
);
u_short htons(u_short netshort);
int WSANtons(
      SOCKET s,
      u_short netshort,
      u_short FAR * lphostshort
); 
進(jìn)入winsocket
 下面開始整理winsocket 的一些細(xì)節(jié):
 所有的winsocket應(yīng)用其實(shí)都是調(diào)用winsock dll 中的方法,所以通過WSAstartup加載是第一步。否則就會(huì)出錯(cuò):WSANOTINITIALISED(10093)。
下面先來看看面向連接的協(xié)議:
從服務(wù)器端來看:
1.bind,將套接字和一個(gè)已知的地址進(jìn)行綁定。
 
這樣就創(chuàng)建了一個(gè)流套接字,這個(gè)步驟最常見的錯(cuò)誤是WSAEADDRINUSE (10048) ,表示另外一個(gè)進(jìn)程已經(jīng)和本地IP和端口進(jìn)行了綁定,或者那個(gè)IP地址和端口號處于TIME_WAIT狀態(tài)。
2.Listen,將套接字置于監(jiān)聽狀態(tài)。
  
  int listen(
        SOCKET s,
       int backlog
    )
backlog參數(shù)指定了正在等待連接的最大隊(duì)列長度,如果實(shí)際訪問的客戶端大于該最大長度就會(huì)出錯(cuò):WSAECONNREFUSED (10061)。事實(shí)上該backlog本身也是由基層協(xié)議提供者決定的。在這個(gè)階段還有一種常見的錯(cuò)誤就是WSAEINVAL (10022),即沒有綁定就進(jìn)行監(jiān)聽了。
3.accept和WSAAccept
SOCKET accept(
SOCKET s,
struct sockaddr FAR *addr,
int FAR* addrlen,
調(diào)用accept可為待決連接隊(duì)列中的第一個(gè)連接請求提供服務(wù)。(在服務(wù)器端接收連接前,所有的客戶端連接請求是放在一個(gè)“待決”隊(duì)列中的。)
accept會(huì)返回一個(gè)新的套接字描述符,它對應(yīng)于已經(jīng)接受的那個(gè)客戶機(jī)連接。對于
該客戶機(jī)后續(xù)的所有操作,都應(yīng)使用這個(gè)新套接字。至于原來那個(gè)監(jiān)聽套接字,它仍然用于
接受其他客戶機(jī)連接,而且仍處于監(jiān)聽模式。
SOCKET WSAAccept(
SOCKET s,
struct sockaddr FAR *addr,
LPINT addrlen,
LPCONDITIONPROC lpfncondition,
DWORD dwCallBackData
對于客戶端相對要簡單得多,主要由以下幾步:
1) 用socket或WSASocket創(chuàng)建一個(gè)套接字。
2) 解析服務(wù)器名(以基層協(xié)議為準(zhǔn))。
3) 用connect或WSAConnect初始化一個(gè)連接。
在connect過程常發(fā)生的錯(cuò)誤有:WSAECONNREFUSED (10061)連接的計(jì)算機(jī)沒有監(jiān)聽指定端口的進(jìn)程;WSAETIMEDOUT (10060)這種情況一般發(fā)生在試圖連接的計(jì)算機(jī)不能用時(shí)(亦可能因?yàn)榈街鳈C(jī)之間的路由上出現(xiàn)硬件故障或主機(jī)目前不在網(wǎng)上)。
連接之后就是數(shù)據(jù)傳輸了,就是發(fā)送和接收了:
int send(
    SOCKET s,
    const char FAR * buf,
    int len,
    int flags)
返回發(fā)送的字節(jié)數(shù),如果出錯(cuò)常見的錯(cuò)誤是:WSAECONNABORTED (10053) 這一錯(cuò)誤一般發(fā)生在虛擬回路由于超時(shí)或協(xié)議有錯(cuò)而中斷的時(shí)候。遠(yuǎn)程主機(jī)上的應(yīng)用通過執(zhí)行強(qiáng)行關(guān)閉或意外中斷操作重新設(shè)置虛擬虛路時(shí),或遠(yuǎn)程主機(jī)重新啟動(dòng)時(shí),發(fā)生的則是WSAECONNRESET(10054)錯(cuò)誤。。最后一個(gè)常見錯(cuò)誤是WSAETIMEOUT(10060),它發(fā)生在連接由于網(wǎng)絡(luò)故障或遠(yuǎn)程連接系統(tǒng)異常死機(jī)而引起的連接中斷時(shí)。
int recv(
    SOCKET s,
    const char FAR * buf,
    int len,
    int flags)
無連接協(xié)議
    首先從接收端(類似于有連接方式中的服務(wù)端,但不是服務(wù)端)看,首先也是通過socket或WSAsocket創(chuàng)建套接字。再通過bind進(jìn)行綁定。下面跳過Listen和Accept步驟,直接等待接收就可以了。
接收函數(shù):
int recvfrom(
    SOCKET s,
    char FAR * buf,
    int len,
    int flags,
    struct SockAddr FAR *from,
    int FAR * fromlen
)
發(fā)送:建立SCOKET后調(diào)用sendto或WSASendTo
int sendto(
    SOCKET s,
    char FAR * buf,
    int len,
    int flags,
    struct SockAddr FAR * to,
    int FAR * tolen
)

posted on 2008-03-18 11:16 隨意門 閱讀(616) 評論(0)  編輯 收藏 引用


只有注冊用戶登錄后才能發(fā)表評論。
網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            激情成人av在线| 亚洲美女免费精品视频在线观看| 亚洲一线二线三线久久久| 亚洲人成人一区二区在线观看| 久久久久久久久综合| 国产综合视频| 欧美韩日亚洲| 欧美婷婷在线| 久久精品99国产精品| 欧美一乱一性一交一视频| 激情综合久久| 亚洲激情小视频| 国产精品成人播放| 久久久91精品| 欧美成人免费在线观看| 亚洲一区二区三| 久久成人免费视频| 亚洲人成在线播放网站岛国| 夜夜夜久久久| 国产中文一区| 亚洲精品免费在线| 国产视频观看一区| 亚洲黄色av一区| 国产精品网红福利| 欧美大胆a视频| 国产精品久99| 欧美激情视频在线免费观看 欧美视频免费一| 欧美福利电影网| 欧美中文字幕在线观看| 欧美激情综合网| 久久精品99国产精品日本| 欧美成人午夜激情| 久久高清福利视频| 欧美精品久久久久久久免费观看| 亚洲欧美日韩中文视频| 麻豆久久久9性大片| 亚洲在线观看视频| 欧美黑人在线观看| 久久婷婷色综合| 国产精品伦一区| 91久久久久久| 亚洲国产第一| 欧美专区在线观看一区| 亚洲永久免费精品| 欧美日韩国产小视频| 欧美成人一区二区三区在线观看| 国产日韩欧美精品在线| 99视频一区二区| 亚洲久久成人| 免费视频一区| 久久免费高清视频| 国产一区av在线| 亚洲一级二级在线| av成人毛片| 欧美精品久久天天躁| 欧美大色视频| 亚洲激情在线| 美日韩免费视频| 欧美成人精品高清在线播放| 好吊一区二区三区| 午夜精彩国产免费不卡不顿大片| 亚洲欧美变态国产另类| 欧美日韩综合一区| 一本不卡影院| 小黄鸭精品aⅴ导航网站入口| 欧美日韩在线另类| 在线视频欧美精品| 亚洲欧美日韩精品久久奇米色影视| 欧美日韩美女一区二区| 99re6热只有精品免费观看 | 狼狼综合久久久久综合网 | 一区二区三区视频在线播放| 免费视频一区| 最近中文字幕日韩精品 | 亚洲高清久久网| 蜜桃久久av一区| 亚洲国产黄色| 亚洲视频精品在线| 国产欧美精品日韩区二区麻豆天美| 亚洲欧美激情四射在线日| 久久久久网址| 亚洲国产综合在线| 欧美日韩一区二区在线观看| 亚洲综合色自拍一区| 久久躁狠狠躁夜夜爽| 亚洲激情国产| 欧美亚洲成人精品| 欧美中文字幕| 亚洲国产欧美另类丝袜| 亚洲永久精品大片| 国产一区二区三区久久 | 欧美一区影院| 亚洲欧洲日本在线| 午夜精品网站| 91久久精品网| 国产精品久久久久久久久久久久久| 午夜在线a亚洲v天堂网2018| 欧美ed2k| 欧美一区二区三区免费大片| 亚洲高清123| 国产精品久久久久91| 久久久久国产一区二区三区四区| 亚洲精品免费在线| 久久久精品日韩欧美| 99日韩精品| 一区二区三区在线观看欧美| 欧美日韩一区二区三区免费看| 欧美在线视频观看| 亚洲精品美女| 麻豆精品国产91久久久久久| 亚洲一区视频在线| 亚洲经典三级| 国产综合香蕉五月婷在线| 欧美精品一区二| 久久日韩精品| 午夜精品网站| 中文精品视频| 亚洲精品美女久久久久| 久久人人97超碰精品888| 亚洲一区二区四区| 亚洲激情另类| 一区二区视频在线观看| 国产精品爽黄69| 欧美日韩国产成人精品| 免费成人毛片| 久久五月婷婷丁香社区| 欧美一区深夜视频| 亚洲一区二区成人| 中文在线不卡视频| 日韩视频在线一区二区| 欧美韩国日本综合| 欧美不卡视频一区发布| 另类图片国产| 久久婷婷麻豆| 久久性色av| 久久亚洲视频| 久久中文字幕一区二区三区| 午夜精品一区二区三区电影天堂 | 91久久精品美女高潮| 欧美韩日高清| 亚洲丰满在线| 亚洲国产精品一区二区第四页av | 亚洲精品偷拍| 亚洲经典在线| 亚洲黄色尤物视频| 亚洲国产美女| 亚洲精品在线免费观看视频| 亚洲国产精品一区二区尤物区| 欧美77777| 亚洲国产黄色片| 亚洲精选在线观看| 日韩亚洲欧美精品| 在线一区二区三区四区五区| 亚洲神马久久| 午夜亚洲福利| 久久久一区二区| 欧美高清在线视频| 欧美日韩亚洲一区三区| 国产精品久久一区主播| 国产亚洲精品久| 亚洲高清在线观看| 一区二区三区视频免费在线观看| 中日韩美女免费视频网址在线观看 | 亚洲欧美日韩国产成人精品影院| 亚洲一二区在线| 欧美在线观看www| 久久午夜视频| 欧美日韩国产不卡在线看| 国产精品腿扒开做爽爽爽挤奶网站| 国产午夜精品美女毛片视频| 亚洲高清视频的网址| 亚洲深夜福利视频| 久久精品123| 亚洲国产精品久久久久| 亚洲网站在线| 久久亚洲精品一区| 国产精品大片wwwwww| 经典三级久久| 中文一区二区| 麻豆久久婷婷| 夜夜嗨av色综合久久久综合网| 欧美伊人精品成人久久综合97| 欧美成人精品在线| 国产日韩一区二区三区| 亚洲精品欧洲精品| 久久久久国色av免费观看性色| 亚洲黑丝一区二区| 国产精品视频xxx| 国产精品久久久久久久9999| 国产一区二区三区四区hd| 亚洲精品久久久久久久久久久久 | 国产在线精品一区二区夜色| 亚洲国产精品尤物yw在线观看| 亚洲欧美日韩国产中文| 亚洲成色999久久网站| 亚洲欧美激情一区二区| 欧美精品久久一区二区| 伊人久久成人| 欧美亚洲免费| 一区二区久久久久|