国产精品1024永久观看,大尺度欧美暖暖视频在线观看,亚洲宅男精品一区在线观看,欧美日韩一区二区三区视频,2021中文字幕在线观看

  • <option id="fbvk0"></option>
    1. <rt id="fbvk0"><tr id="fbvk0"></tr></rt>
      <center id="fbvk0"><optgroup id="fbvk0"></optgroup></center>
      <center id="fbvk0"></center>

      <li id="fbvk0"><abbr id="fbvk0"><dl id="fbvk0"></dl></abbr></li>

      一種基于socket的網(wǎng)絡通信方法、裝置及系統(tǒng)的制作方法

      文檔序號:7991039閱讀:195來源:國知局
      專利名稱:一種基于socket的網(wǎng)絡通信方法、裝置及系統(tǒng)的制作方法
      技術(shù)領(lǐng)域
      本發(fā)明涉及網(wǎng)絡通信技術(shù)領(lǐng)域,尤其涉及一種基于socket的網(wǎng)絡通信方法、裝置及系統(tǒng)。
      背景技術(shù)
      在TCP/IP網(wǎng)絡應用中,通信的兩個進程間相互作用的主要模式是客戶/服務器模式(Client/Server model),即客戶向服務器發(fā)出服務請求,服務器接收到請求后,提供相應的服務。套接字,是支持TCP/IP的網(wǎng)絡通信的基本操作單元,可以看作是不同主機之間的進程進行雙向通信的端面點,簡單的說就是通信的雙方的一種約定,用套接字中的相關(guān)函數(shù)來完成通信過程。
      在利用套接字通信時要先建立套接字的連接,根據(jù)連接啟動的方式以及本地套接字要連接的目標,套接字之間的連接過程可以分為三個步驟:服務器監(jiān)聽、客戶端請求、連接確認。服務器監(jiān)聽是指服務器端套接字并不定位具體的客戶端套接字,而是處于等待連接的狀態(tài),按時監(jiān)控網(wǎng)絡狀態(tài);客戶端請求是指由客戶端的套接字提出連接請求,要連接的目標是服務器端的套接字。連接確認是指當服務器端套接字監(jiān)聽到或者說接收到客戶端套接字的連接請求,它就響應客戶端套接字的請求,建立一個新的線程,把服務器端套接字的描述發(fā)給客戶端,一旦客戶端確認了此描述,連接就建立好了。而服務器套接字繼續(xù)處于監(jiān)聽狀態(tài),繼續(xù)接收其他客戶端套接字的連接請求。
      例如,應用程序a、b、C、d等分別為運行在同一網(wǎng)絡上的不同結(jié)點的計算機中,若應用程序a希望發(fā)送數(shù)據(jù)到應用程序b中,而應用程序b希望自己的b-Ι線程接收并處理該數(shù)據(jù),假設(shè)a為服務端,b為客戶端,其實現(xiàn)方式如下:在a的某處建立服務端socket,在b的b-Ι線程處建立客戶端socket并連接;a程序調(diào)用socket發(fā)送函數(shù),發(fā)送數(shù)據(jù)至b程序的b-Ι線程中的socket ;b_l線程調(diào)用socket接收函數(shù)讀取數(shù)據(jù),應用程序b對接收數(shù)據(jù)進行處理。
      由上述應用程序a與b的通信過程可得知,運行在網(wǎng)絡上的兩個不同結(jié)點的多線程應用程序,若想建立穩(wěn)定的socket連接并收發(fā)數(shù)據(jù),且發(fā)送方希望接收方的指定線程接收數(shù)據(jù),一般情況下,需要在發(fā)送方和接收方的指定線程編寫socket通信代碼。因此,在進行應用程序的設(shè)計時,應用程序的設(shè)計者需要關(guān)心socket程序設(shè)計的細節(jié),包括調(diào)用socket函數(shù)來建立連接、讀取、發(fā)送、查詢網(wǎng)絡消息以及維護socket通信網(wǎng)絡等,整個網(wǎng)絡通信過程較為復雜。發(fā)明內(nèi)容
      有鑒于此,本發(fā)明提供了一種基于socket的網(wǎng)絡通信方法、裝置及系統(tǒng),用于解決應用程序的設(shè)計者需要考慮socket程序設(shè)計細節(jié)、整個網(wǎng)絡通信過程復雜的問題。
      一種基于socket的網(wǎng)絡通信方法,該方法包括:
      A:初始化過程,包括:
      Al:確定與服務端具有連接關(guān)系的客戶端,分別創(chuàng)建與每一個客戶端對應的socket類對象,并記錄所述客戶端與其對應的socket類對象的對應關(guān)系,所述socket類對象中包含了與其對應的客戶端主機的主機名,將所述socket類對象指針存入預先建立的服務端socket鏈表;
      A2:分別建立與所述服務端socket鏈表中每一個socket類對象對應的socket通信隊列,并記錄所述socket類對象與其對應的socket通信隊列的對應關(guān)系;
      B:通信過程,包括:
      B1:服務端監(jiān)聽網(wǎng)絡狀態(tài),當監(jiān)聽到客戶端發(fā)送的連接請求,接收來自發(fā)送連接請求的客戶端的連接;
      B2:服務端指定待接收數(shù)據(jù)客戶端的主機名、線程名和待發(fā)送的數(shù)據(jù),服務端根據(jù)主機名確定帶發(fā)送數(shù)據(jù)客戶端對應的socket類對象,并確定與所述socket類對象對應的socket通信隊列;
      B3:將所述線程名和待發(fā)送數(shù)據(jù)寫入與待接收數(shù)據(jù)的客戶端對應的socket通信隊列中;
      B4:與所述socket類對象對應的socket執(zhí)行程序提取所述socket通信隊列中的線程名和待發(fā)送數(shù)據(jù),并發(fā)送給待接收數(shù)據(jù)的客戶端;
      B5:所述待接收數(shù)據(jù)的客戶端接收所述服務端發(fā)送的數(shù)據(jù),從所述數(shù)據(jù)中解析出線程名,將所述數(shù)據(jù)中去除線程名后的數(shù)據(jù)存入預先建立的所述解析出的線程名所對應的線程隊列中,客戶端的指定線程從所述線程隊列中提取數(shù)據(jù)。
      所述服務端接收來自發(fā)送連接請求的客戶端的連接具體為:
      判斷所述發(fā)送請求的客戶端對應的socket類對象是否存在于所述服務端socket鏈表中時,如果是,則接收來自發(fā)送連接請求的客戶端的連接;如果否,則倉Il建socket類對象并進行綁定監(jiān)聽,然后接收來自發(fā)送連接請求的客戶端的連接。
      一種基于socket的網(wǎng)絡通信方法,該方法包括:
      C:初始化過程,包括:
      Cl:確定與客戶端具有連接關(guān)系的服務端,分別創(chuàng)建與每一個服務端對應的socket類對象,并記錄所述服務端與其對應的socket類對象的對應關(guān)系,所述socket類對象中包含了與其對應的服務端的主機信息,將所述socket類對象指針存入預先建立的客戶端socket鏈表;
      C2:客戶端創(chuàng)建線程隊列鏈表,然后注冊線程隊列,將線程隊列和線程名綁定;
      D:通信過程,包括:
      Dl:向與所述客戶端socket鏈表中的socket類對象對應的服務端發(fā)送連接請求,當客戶端發(fā)送的連接請求被所述服務端監(jiān)聽到,客戶端與監(jiān)聽到所述連接請求的服務端建立連接;
      D2:服務端指定待接收數(shù)據(jù)客戶端的主機名、線程名和待發(fā)送的數(shù)據(jù),與客戶端建立連接的服務端將線程名和待發(fā)送數(shù)據(jù)存入服務端socket鏈表中與客戶端對應的socket類對象所對應的通信隊列中,與所述socket類對象對應的socket執(zhí)行程序提取所述socket通信隊列中的線程名和待發(fā)送數(shù)據(jù),并發(fā)送給所述客戶端;
      D3:客戶端接收與其建立連接的服務端發(fā)送的數(shù)據(jù),從接收的數(shù)據(jù)中解析出線程名;
      D4:將所述線程名從所述接收的數(shù)據(jù)中去除;
      D5:將去除線程名后的數(shù)據(jù)寫入所述解析出的線程名所對應的線程隊列中;
      D6:從線程隊列中提取所述去除線程名后的數(shù)據(jù)。
      所述線程隊列鏈表中的存放單元為含有線程隊列句柄和線程名的結(jié)構(gòu)體,注冊線程隊列時,將所述線程隊列句柄和線程名寫入結(jié)構(gòu)體,將結(jié)構(gòu)體添加至線程隊列鏈表尾部。
      一種基于socket的服務端網(wǎng)絡通信裝置,包括:
      第一初始化模塊,用于確定與服務端具有連接關(guān)系的客戶端,分別創(chuàng)建與每一個客戶端對應的socket類對象,并記錄所述客戶端與其對應的socket類對象的對應關(guān)系,所述socket類對象中包含了與其對應的客戶端主機的主機名,將所述socket類對象指針存入預先建立的服務端socket鏈表;分別建立與所述服務端socket鏈表中每一個socket類對象對應的socket通信隊列,并記錄所述socket類對象與其對應的socket通信隊列的對應關(guān)系;
      監(jiān)聽模塊,用于監(jiān)聽客戶端發(fā)送的連接請求,接收來自客戶端的連接;
      發(fā)送模塊,用于確定與所述發(fā)送請求客戶端對應的socket類對象,并確定與所述socket類對象對應的socket通信隊列;將服務端指定的線程名和待發(fā)送數(shù)據(jù)寫入與待接收數(shù)據(jù)的客戶端對應的socket通信隊列中;與所述socket類對象對應的socket執(zhí)行程序提取所述socket通信隊列中的線程名和待發(fā)送數(shù)據(jù),并發(fā)送給所述發(fā)送請求的客戶端。
      一種基于socket的客戶端網(wǎng)絡通信裝置,包括:
      第二初始化模塊,用于確定與客戶端具有連接關(guān)系的服務端,分別創(chuàng)建與每一個服務端對應的socket類對象,并記錄所述服務端與其對應的socket類對象的對應關(guān)系,所述socket類對象中包含了與其對應的服務端主機的主機名,將所述socket類對象指針存入預先建立的客戶端socket鏈表;還用于創(chuàng)建線程隊列,然后注冊線程隊列,將線程隊列和線程名綁定;
      連接模塊,用于加載套接字庫,倉Il建客戶端socket,向與所述客戶端socket鏈表中的socket類對象對應的服務端發(fā)出連接請求直至連接成功;
      接收模塊,用于接收服務端發(fā)送的數(shù)據(jù),并對數(shù)據(jù)進行解析,解析出線程名,將去除線程名后的數(shù)據(jù)寫入所述解析出的線程名所對應的線程隊列中,讀取所述線程隊列的數(shù)據(jù)。
      一種基于socket的網(wǎng)絡通信系統(tǒng),包括上述客戶端網(wǎng)絡通信裝置和服務端的網(wǎng)絡通信裝置。
      本發(fā)明提供的基于socket的網(wǎng)絡通信方法及系統(tǒng)中,當服務端發(fā)送數(shù)據(jù)時,根據(jù)客戶端的主機名尋找對應的socket類對象和socket通信隊列,將客戶端的線程名和待發(fā)送數(shù)據(jù)寫入socket通信隊列;從socket通信隊列中提取出待發(fā)送數(shù)據(jù)并發(fā)送;客戶端的socket接收到服務端發(fā)送的數(shù)據(jù),進行解析,根據(jù)解析出的線程名得到相應的線程隊列,并將去除線程名后的原始數(shù)據(jù)寫入線程隊列中;從線程隊列中提取出客戶端發(fā)送的數(shù)據(jù)。本發(fā)明提供的網(wǎng)絡通信方法及系統(tǒng),使得應用程序設(shè)計者在進行應用程序開發(fā)時,不需要考慮socket程序設(shè)計細節(jié),整個網(wǎng)絡通信過程簡潔明了。


      為了更清楚地說明本發(fā)明實施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對實施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的實施例,對于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動的前提下,還可以根據(jù)提供的附圖獲得其他的附圖。
      圖1為本發(fā)明實施例提供的網(wǎng)絡通信方法的時序圖。
      具體實施方式
      下面將結(jié)合本發(fā)明實施例中的附圖,對本發(fā)明實施例中的技術(shù)方案進行清楚、完整地描述,顯然,所描述的實施例僅僅是本發(fā)明一部分實施例,而不是全部的實施例?;诒景l(fā)明中的實施例,本領(lǐng)域普通技術(shù)人員在沒有做出創(chuàng)造性勞動前提下所獲得的所有其他實施例,都屬于本發(fā)明保護的范圍。
      實施例一
      本發(fā)明實施例提供了一種基于socket的網(wǎng)絡通信方法,該方法的時序圖如圖1所示,包括:初始化過程和通信過程,對于服務端而言,初始化過程包括:
      Sll:確定與服務端具有連接關(guān)系的客戶端,分別創(chuàng)建與每一個客戶端對應的socket類對象,并記錄客戶端與其對應的socket類對象的對應關(guān)系;
      其中,socket類對象中包含了與其對應的客戶端的主機信息,包括客戶端主機的主機名、IP地址。
      S12:將socket類對象指針存入預先建立的服務端socket鏈表;
      在本實施例中,將socket類對象指針存入服務端socket鏈表中,socket類對象指針指向socket類對象,當然,也可將socket類對象直接存入服務端socket鏈表中。
      S13:分別建立與服務端socket鏈表中每一個socket類對象對應的socket通信隊列,并記錄所述socket類對象與其對應的socket通信隊列的對應關(guān)系;
      在本實施例中,建立通信隊列的同時,為通信隊列標識,以方便查找。
      通信過程包括:
      服務端監(jiān)聽網(wǎng)絡狀態(tài),當監(jiān)聽到客戶端發(fā)送的連接請求,接收來自發(fā)送連接請求的客戶端的連接;
      其中,服務端接收來自發(fā)送連接請求的客戶端的連接之前,首先判斷發(fā)送連接請求的客戶端對應的socket類對象是否存在于服務端socket鏈表中,如果是,則接收來自發(fā)送連接請求的客戶端的連接;如果否,則倉Il建socket類對象,然后接收來自發(fā)送連接請求的客戶端的連接。
      服務端向客戶端發(fā)送數(shù)據(jù)的過程為:
      S21:服務端指定待接收數(shù)據(jù)客戶端的主機名、線程名和待發(fā)送的數(shù)據(jù),服務端根據(jù)主機名確定待接收數(shù)據(jù)的客戶端對應的socket類對象,并確定與所述socket類對象對應的socket通信隊列;
      在本實施例中,客戶端的主機名、線程名和待發(fā)送數(shù)據(jù)由服務端的應用層指定,對于服務端而言,接收服務端發(fā)送的數(shù)據(jù)的客戶端是已知的。
      S22:將線程名和待發(fā)送數(shù)據(jù)寫入待接收數(shù)據(jù)的客戶端對應的socket通信隊列中;
      S23:與socket類對象對應的socket執(zhí)行程序提取socket通信隊列中的線程名和待發(fā)送數(shù)據(jù),并發(fā)送給待接收數(shù)據(jù)的客戶端;
      對于客戶端而言,接收服務端發(fā)送的數(shù)據(jù)的過程包括初始化過程和通信過程,其中,初始化過程包括:
      S31:確定與客戶端具有連接關(guān)系的服務端,分別創(chuàng)建與每一個服務端對應的socket類對象,并記錄服務端與其對應的socket類對象的對應關(guān)系,socket類對象中包含了與其對應的服務端的主機信息;
      其中,socket類對象中包含了與其對應的服務端主機的主機名、IP地址和端口號。
      S32:將socket類對象指針存入預先建立的客戶端socket鏈表;
      S33:創(chuàng)建線程隊列鏈表,然后注冊線程隊列,將線程隊列和線程名綁定。
      通信過程包括:
      客戶端加載套接字庫,倉Il建客戶端socket,向與客戶端socket鏈表中的socket類對象對應的服務端發(fā)送連接請求,當客戶端發(fā)送的連接請求被服務端監(jiān)聽到,客戶端與監(jiān)聽到連接請求的服務端建立連接;與客戶端建立連接的服務端將線程名和待發(fā)送數(shù)據(jù)寫入通信隊列中,該通信隊列為與服務端socket中與客戶端對應的socket類對象所對應的通信隊列,與socket類對象對應的socket執(zhí)行程序提取socket通信隊列中的線程名和待發(fā)送數(shù)據(jù),并發(fā)送給客戶端;
      客戶端接收發(fā)送端發(fā)送的數(shù)據(jù)的過程為:
      S41:客戶端接收服務端發(fā)送的數(shù)據(jù),從接收的數(shù)據(jù)中解析出線程名;
      S42:將線程名從接收的數(shù)據(jù)中去除;
      S43:將接收數(shù)據(jù)中去除線程名后的數(shù)據(jù)寫入所述解析出的線程名所對應的線程隊列中;
      其中,接收數(shù)據(jù)中去除線程名后的數(shù)據(jù)即為服務端發(fā)送的原始數(shù)據(jù)。
      S44:客戶端的指定線程從線程隊列中提取出服務端發(fā)送的原始數(shù)據(jù)。
      其中,注冊線程隊列,將線程隊列和線程名綁定的過程如下:創(chuàng)建一個線程隊列鏈表,存放的單元為含有線程隊列句柄和線程名的結(jié)構(gòu)體,注冊線程隊列時,將線程隊列句柄和線程名寫入結(jié)構(gòu)體中,再將此結(jié)構(gòu)體添加至線程隊列鏈表尾部。
      本發(fā)明實施例提供的網(wǎng)絡通信方法實現(xiàn)的是網(wǎng)絡底層的socket通信,服務端發(fā)送數(shù)據(jù)時,只需在應用層指定接收數(shù)據(jù)的客戶端的主機名、線程名和待發(fā)送數(shù)據(jù)即可。
      實施例二
      本發(fā)明實施例提供了一種基于socket的網(wǎng)絡通信系統(tǒng),包括服務端的網(wǎng)絡通信裝置和客戶端的網(wǎng)絡通信裝置,其中服務端的網(wǎng)絡通信裝置包括:第一初始化模塊、監(jiān)聽模塊和發(fā)送模塊。
      第一初始化模塊,用于確定與服務端具有連接關(guān)系的客戶端,分別創(chuàng)建與每一個客戶端對應的socket類對象,并記錄客戶端與其對應的socket類對象的對應關(guān)系,socket類對象中包含了與其對應的客戶端主機的主機名,將socket類對象指針存入預先建立的服務端socket鏈表;分別建立與服務端socket鏈表中每一個socket類對象對應的socket通信隊列,并記錄socket類對象與其對應的socket通信隊列的對應關(guān)系。
      監(jiān)聽模塊,用于監(jiān)聽客戶端發(fā)送的連接請求,接收來自客戶端的連接。
      發(fā)送模塊,用于確定與待接收數(shù)據(jù)的客戶端對應的socket類對象,并確定與socket類對象對應的socket通信隊列;將服務端指定的線程名和待發(fā)送數(shù)據(jù)寫入與待接收數(shù)據(jù)的客戶端對應的socket通信隊列中;與socket類對象對應的socket執(zhí)行程序提取socket通信隊列中的線程名和待發(fā)送數(shù)據(jù),并發(fā)送給待接收數(shù)據(jù)的客戶端。
      其中,服務端的應用層指定接收數(shù)據(jù)客戶端的主機名、線程名和待發(fā)送數(shù)據(jù),根據(jù)指定的主機名查找該主機名對應的socket類對象,在根據(jù)找出的socket類對象查找對應的socket通信隊列,然后將線程名和待發(fā)送數(shù)據(jù)寫入找出的socket通信隊列中。
      客戶端的網(wǎng)絡通信裝置包括:第二初始化模塊、連接模塊和接收模塊。
      第二初始化模塊,用于確定與客戶端具有連接關(guān)系的服務端,分別創(chuàng)建與每一個服務端對應的socket類對象,并記錄服務端與其對應的socket類對象的對應關(guān)系,socket類對象中包含了與其對應的服務端主機的主機名,將socket類對象指針存入預先建立的客戶端socket鏈表;還用于創(chuàng)建線程隊列,然后注冊線程隊列,將線程隊列和線程名綁定。
      連接模塊,用于加載套接字庫,倉Il建客戶端socket,向與客戶端socket鏈表中的socket類對象對應的服務端發(fā)出連接請求直至連接成功。
      接收模塊,用于接收服務端發(fā)送的數(shù)據(jù),并對數(shù)據(jù)進行解析,解析出線程名,將去除線程名后的數(shù)據(jù)寫入所述解析出的線程名所對應的線程隊列中,讀取所述線程隊列的數(shù)據(jù)。
      對所公開的實施例的上述說明,使本領(lǐng)域?qū)I(yè)技術(shù)人員能夠?qū)崿F(xiàn)或使用本發(fā)明。對這些實施例的多種修改對本領(lǐng)域的專業(yè)技術(shù)人員來說將是顯而易見的,本文中所定義的一般原理可以在不脫離本發(fā)明的精神或范圍的情況下,在其它實施例中實現(xiàn)。因此,本發(fā)明將不會被限制于本文所示的這些實施例,而是要符合與本文所公開的原理和新穎特點相一致的最寬的范圍。
      權(quán)利要求
      1.一種基于socket的網(wǎng)絡通信方法,其特征在于,該方法包括: A:初始化過程,包括: Al:確定與服務端具有連接關(guān)系的客戶端,分別創(chuàng)建與每一個客戶端對應的socket類對象,并記錄所述客戶端與其對應的socket類對象的對應關(guān)系,所述socket類對象中包含了與其對應的客戶端主機的主機名,將所述socket類對象指針存入預先建立的服務端socket鏈表中; A2:分別建立與所述服務端socket鏈表中每一個socket類對象對應的socket通信隊列,并記錄所述socket類對象與其對應的socket通信隊列的對應關(guān)系; B:通信過程,包括: B1:服務端監(jiān)聽網(wǎng)絡狀態(tài),當監(jiān)聽到客戶端發(fā)送的連接請求,接收來自發(fā)送連接請求的客戶端的連接; B2:服務端指定待接收數(shù)據(jù)客戶端的主機名、線程名和待發(fā)送的數(shù)據(jù),根據(jù)所述主機名確定待接收數(shù)據(jù)客戶端對應的socket類對象,并確定與所述socket類對象對應的socket通信隊列; B3:將所述線程名和所述待發(fā)送數(shù)據(jù)寫入待接收數(shù)據(jù)的客戶端對應的socket通信隊列中; B4:與所述socket類對象對應的socket執(zhí)行程序提取所述socket通信隊列中的線程名和待發(fā)送數(shù)據(jù),并發(fā)送給待接收數(shù)據(jù)的客戶端; B5:所述待接收數(shù)據(jù)的客戶端接收服務端發(fā)送的數(shù)據(jù),從所述服務端發(fā)送的數(shù)據(jù)中解析出線程名,將所述數(shù)據(jù)中去除線程名后的數(shù)據(jù)存入預先建立的所述解析出的線程名所對應的線程隊列中,客戶端的指定線程從所述線程隊列中提取數(shù)據(jù)。
      2.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述服務端接收來自發(fā)送連接請求的客戶端的連接具體為: 判斷所述發(fā)送請求 的客戶端對應的socket類對象是否存在于所述服務端socket鏈表中時,如果是,則接收來自發(fā)送連接請求的客戶端的連接;如果否,則創(chuàng)建socket類對象并進行綁定監(jiān)聽,然后接收來自發(fā)送連接請求的客戶端的連接。
      3.一種基于socket的網(wǎng)絡通信方法,其特征在于,該方法包括: C:初始化過程,包括: Cl:確定與客戶端具有連接關(guān)系的服務端,分別創(chuàng)建與每一個服務端對應的socket類對象,并記錄所述服務端與其對應的socket類對象的對應關(guān)系,所述socket類對象中包含了與其對應的服務端的主機信息,將所述socket類對象指針存入預先建立的客戶端socket 鏈表; C2:客戶端創(chuàng)建線程隊列鏈表,然后注冊線程隊列,將線程隊列和線程名綁定; D:通信過程,包括: Dl:向與所述客戶端socket鏈表中的socket類對象對應的服務端發(fā)送連接請求,當客戶端發(fā)送的連接請求被所述服務端監(jiān)聽到,客戶端與監(jiān)聽到所述連接請求的服務端建立連接; D2:與客戶端建立連接的服務端指定待接收數(shù)據(jù)客戶端的主機名、線程名和待發(fā)送的數(shù)據(jù),將線程名和待發(fā)送的數(shù)據(jù)存入服務端socket鏈表中與客戶端對應的socket類對象所對應的通信隊列中,與所述socket類對象對應的socket執(zhí)行程序提取所述socket通信隊列中的線程名和待發(fā)送數(shù)據(jù),并發(fā)送給客戶端; D3:客戶端接收與其建立連接的服務端發(fā)送的數(shù)據(jù),從接收的數(shù)據(jù)中解析出線程名; D4:將所述線程名從所述接收的數(shù)據(jù)中去除; D5:將去除線程名后的數(shù)據(jù)寫入所述解析出的線程名所對應的線程隊列中; D6:從線程隊列中提取所述去除線程名后的數(shù)據(jù)。
      4.根據(jù)權(quán)利要求3所述的方法,其特征在于,所述線程隊列鏈表中的存放單元為含有線程隊列句柄和線程名的結(jié)構(gòu)體,注冊線程隊列時,將所述線程隊列句柄和線程名寫入結(jié)構(gòu)體,將結(jié)構(gòu)體添加至線程隊列鏈表尾部。
      5.一種基于socket的服務端網(wǎng)絡通信裝置,其特征在于,包括: 第一初始化模塊,用于確定與服務端具有連接關(guān)系的客戶端,分別創(chuàng)建與每一個客戶端對應的socket類對象,并記錄所述客戶端與其對應的socket類對象的對應關(guān)系,所述socket類對象中包含了與其對應的客戶端主機的主機名,將所述socket類對象指針存入預先建立的服務端socket鏈表;分別建立與所述服務端socket鏈表中每一個socket類對象對應的socket通信隊列,并記錄所述socket類對象與其對應的socket通信隊列的對應關(guān)系; 監(jiān)聽模塊,用于監(jiān)聽客戶端發(fā)送的連接請求,接收來自客戶端的連接; 發(fā)送模塊,用于確定與所述發(fā)送請求客戶端對應的socket類對象,并確定與所述socket類對象對應的socket通信隊列;將服務端所指定的線程名和待發(fā)送數(shù)據(jù)寫入與所述待接收數(shù)據(jù)的客戶端對應的socket通信隊列中;與所述socket類對象對應的socket執(zhí)行程序提取所述socket通信隊列中的線程名和待發(fā)送數(shù)據(jù),并發(fā)送給待接收數(shù)據(jù)的客戶端。
      6.一種基于socket的客戶端網(wǎng)絡通信裝置,其特征在于,包括: 第二初始化模塊,用于確定與客戶端具有連接關(guān)系的服務端,分別創(chuàng)建與每一個服務端對應的socket類對象,并記錄所述服務端與其對應的socket類對象的對應關(guān)系,所述socket類對象中包含了與其對應的服務端的主機信息,將所述socket類對象指針存入預先建立的客戶端so cket鏈表;還用于創(chuàng)建線程隊列,然后注冊線程隊列,將線程隊列和線程名綁定; 連接模塊,用于加載套接字庫,倉Il建客戶端socket,向與所述客戶端socket鏈表中的socket類對象對應的服務端發(fā)出連接請求直至連接成功; 接收模塊,用于接收服務端發(fā)送的數(shù)據(jù),并對數(shù)據(jù)進行解析,解析出線程名,將去除線程名后的數(shù)據(jù)寫入所述解析出的線程名所對應的線程隊列中,讀取所述線程隊列的數(shù)據(jù)。
      7.一種基于socket的網(wǎng)絡通信系統(tǒng),其特征在于,包括如權(quán)利要求5和權(quán)利要求6所述的網(wǎng)絡通信裝置。
      全文摘要
      本發(fā)明提供的基于socket的網(wǎng)絡通信方法中,服務端發(fā)送數(shù)據(jù)時,根據(jù)客戶端的主機名尋找對應的socket類對象和socket通信隊列,將客戶端的線程名和待發(fā)送數(shù)據(jù)寫入socket通信隊列;從socket通信隊列中提取出待發(fā)送數(shù)據(jù)并發(fā)送;客戶端的socket接收到服務端發(fā)送的數(shù)據(jù),進行解析,根據(jù)解析出的線程名找到相應的線程隊列,并將去除線程名后的原始數(shù)據(jù)寫入線程隊列中;從線程隊列中提取出服務端發(fā)送的數(shù)據(jù)。本發(fā)明提供的網(wǎng)絡通信方法及系統(tǒng),使得應用程序設(shè)計者在進行應用程序開發(fā)時,不需要考慮底層socket網(wǎng)絡通信編程,只需調(diào)用網(wǎng)絡接口函數(shù)即可,整個網(wǎng)絡通信過程簡潔明了。
      文檔編號H04L29/06GK103139157SQ20111038544
      公開日2013年6月5日 申請日期2011年11月28日 優(yōu)先權(quán)日2011年11月28日
      發(fā)明者吳晶晶 申請人:北京南車時代信息技術(shù)有限公司
      網(wǎng)友詢問留言 已有0條留言
      • 還沒有人留言評論。精彩留言會獲得點贊!
      1