freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

基于winsock的網(wǎng)絡(luò)按時計費(fèi)系統(tǒng)設(shè)計與實(shí)現(xiàn)論文(編輯修改稿)

2025-02-14 15:09 本頁面
 

【文章內(nèi)容簡介】 ket() 有鑒于以上幾個函數(shù)在整個網(wǎng)絡(luò)編程中的重要性,有必要結(jié)合程序?qū)嵗龑ζ渥鲚^深入的剖析。服務(wù)器端應(yīng)用程序在使用套接字之前,首先必須擁有一個Socket,系統(tǒng)調(diào)用socket()函數(shù)向應(yīng)用程序提供創(chuàng)建套接字的手段。該套接字實(shí)際上是在計算機(jī)中提供了一個通信埠,可以通過這個埠與任何一個具有套接字接口的計算機(jī)通信【16】。應(yīng)用程序在網(wǎng)絡(luò)上傳輸、接收的信息都通過這個套接字接口來實(shí)現(xiàn)的。在應(yīng)用開發(fā)中如同使用文件句柄一樣,可以對套接字句柄進(jìn)行讀寫操作: sock=socket(AF_INET,SOCK_STREAM,0)。 函數(shù)的第一個參數(shù)用于指定地址族,在Windows下僅支持AF_INET(TCP/IP地址);第二個參數(shù)用于描述套接字的類型,對于流式套接字提供有SOCK_STREAM;最后一個參數(shù)指定套接字使用的協(xié)議,一般為0。該函數(shù)的返回值保存了新套接字的句柄,在程序退出前可以用 closesocket(sock)。函數(shù)來將其釋放。服務(wù)器方一旦獲取了一個新的套接字后應(yīng)通過bind()將該套接字與本機(jī)上的一個端口相關(guān)聯(lián): =AF_INET。 =0。 =htons(USERPORT)。 bind(sock,(LPSOCKADDR)amp。sockin,sizeof(sockin)))。 該函數(shù)的第二個參數(shù)是一個指向包含有本機(jī)IP地址和端口信息的sockaddr_in結(jié)構(gòu)類型的指針,其成員描述了本地端口號和本地主機(jī)地址,經(jīng)過bind()將服務(wù)器進(jìn)程在網(wǎng)絡(luò)上標(biāo)識出來。【17】。然后調(diào)用listen()函數(shù)開始偵聽,再通過accept()調(diào)用等待接收連接以完成連接的建立: //連接請求隊(duì)列長度為1,即只允許有一個請求,若有多個請求, //則出現(xiàn)錯誤,給出錯誤代碼WSAECONNREFUSED。 listen(sock,1)。 //開啟線程避免主程序的阻塞 AfxBeginThread(Server,NULL)。 …… UINT Server(LPVOID lpVoid) { …… int nLen=sizeof(SOCKADDR)。 pViewnewskt=accept(pViewsock,(LPSOCKADDR)amp。 pViewsockin,(LPINT)amp。 nLen)。 …… WSAAsyncSelect(pViewnewskt,pViewm_hWnd,WM_SOCKET_MSG,FD_READ|FD_CLOSE)。 return 1。 }這里之所以把a(bǔ)ccept()放到一個線程中去是因?yàn)樵趫?zhí)行到該函數(shù)時如沒有客戶連接服務(wù)器的請求到來,服務(wù)器就會停在accept語句上等待連接請求的到來,這勢必會引起程序的阻塞,雖然也可以通過設(shè)置套接字為非阻塞方式使在沒有客戶等待時可以使accept()函數(shù)調(diào)用立即返回,但這種輪詢套接字的方式會使CPU處于忙等待方式,從而降低程序的運(yùn)行效率大大浪費(fèi)系統(tǒng)資源??紤]到這種情況,將套接字設(shè)置為阻塞工作方式,并為其單獨(dú)開辟一個子線程,將其阻塞控制在子線程范圍內(nèi)而不會造成整個應(yīng)用程序的阻塞。對于網(wǎng)絡(luò)事件的響應(yīng)顯然要采取異步選擇機(jī)制,只有采取這種方式才可以在由網(wǎng)絡(luò)對方所引起的不可預(yù)知的網(wǎng)絡(luò)事件發(fā)生時能馬上在進(jìn)程中做出及時的響應(yīng)處理,而在沒有網(wǎng)絡(luò)事件到達(dá)時則可以處理其他事件,這種效率是很高的,而且完全符合Windows所標(biāo)榜的消息觸發(fā)原則。前面那段代碼中的WSAAsyncSelect()函數(shù)便是實(shí)現(xiàn)網(wǎng)絡(luò)事件異步選擇的核心函數(shù)。 客戶機(jī)的設(shè)計1)建立客戶端的Socket客戶端應(yīng)用程序首先也是調(diào)用WSAStartup() 函數(shù)來與Winsock的動態(tài)連接庫建立關(guān)系,然后同樣調(diào)用socket() 來建立一個TCP或UDP socket(相同協(xié)定的 sockets 才能相通,TCP 對 TCP,UDP 對 UDP)。與服務(wù)器端的socket 不同的是,客戶端的socket 可以調(diào)用 bind() 函數(shù),由自己來指定IP地址及port號碼;但是也可以不調(diào)用 bind(),而由 Winsock來自動設(shè)定IP地址及port號碼。2)提出連接申請客戶端的Socket使用connect()函數(shù)來提出與服務(wù)器端的Socket建立連接的申請,函數(shù)調(diào)用成功返回0,否則返回SOCKET_ERROR。 int PASCAL FAR connect( SOCKET s, const struct sockaddr FAR *name, int namelen )。 參 數(shù):s:Socket 的識別碼; name:Socket想要連接的對方地址; namelen:name的長度 socket()connect()send()/recv()closesocket() 通過第四個參數(shù)注冊應(yīng)用程序感興取的網(wǎng)絡(luò)事件,在這里通過FD_READ|FD_CLOSE指定了網(wǎng)絡(luò)讀和網(wǎng)絡(luò)斷開兩種事件,當(dāng)這種事件發(fā)生時變會發(fā)出由第三個參數(shù)指定的自定義消息WM_SOCKET_MSG,接收該消息的窗口通過第二個參數(shù)指定其句柄。在消息處理函數(shù)中可以通過對消息參數(shù)低字節(jié)進(jìn)行判斷而區(qū)別出發(fā)生的是何種網(wǎng)絡(luò)事件: void CNetServerView::OnSocket(WPARAM wParam,LPARAM lParam) { int iReadLen=0。 int message=lParam amp。 0x0000FFFF。 switch(message) { case FD_READ://讀事件發(fā)生。此時有字符到達(dá),需要進(jìn)行接收處理 char cDataBuffer[MTU*10]。 //通過套接字接收信息 iReadLen = recv(newskt,cDataBuffer,MTU*10,0)。 //將信息保存到文件 if(!(,CFile::modeReadWrite))(E:,CFile::modeCreate|CFile::modeReadWrite)。 ()。 (cDataBuffer,iReadLen)。 ()。 break。 case FD_CLOSE://網(wǎng)絡(luò)斷開事件發(fā)生。此時客戶機(jī)關(guān)閉或退出。 ……//進(jìn)行相應(yīng)的處理 break。 default: break。 } } 在這里需要實(shí)現(xiàn)對自定義消息WM_SOCKET_MSG的響應(yīng),需要在頭文件和實(shí)現(xiàn)文件中分別添加其消息映射關(guān)系:頭文件: //{{AFX_MSG(CNetServerView) //}}AFX_MSG void OnSocket(WPARAM wParam,LPARAM lParam)。 DECLARE_MESSAGE_MAP() 實(shí)現(xiàn)文件: BEGIN_MESSAGE_MAP(CNetServerView, CView) //{{AFX_MSG_MAP(CNetServerView) //}}AFX_MSG_MAP ON_MESSAGE(WM_SOCKET_MSG,OnSocket) END_MESSAGE_MAP() 部分源代碼Connectdb()//本地數(shù)據(jù)庫進(jìn)行連接Local port=”3350”//定義連接端口Local_ip=getipaddress()//得到本地ip地址(Local_port Local_ip)//進(jìn)行通信綁定()//通信控件進(jìn)行偵聽Connectionrequest事件編碼//連接請求時處理li_lrow=(0)(li_lrow,”ms”,”連接請求,遠(yuǎn)程IP地址:+ ”)if 0then()end if (requestid)remote_IP= li_lrow=(0)(li_lrow,”ms”,”連接成功,遠(yuǎn)程IP地址:+ RemoteIP”)dataarrival:事件編碼:(rsf_recept,8)li_lrow=(0)(li_lrow,”ms”,”收到數(shù)據(jù):”“+data_recept)(li_lrow)deal_data(data_recept)//對接收的報文進(jìn)行處理(data_return)low=(0)(lrow,”ms”,”返回數(shù)據(jù):”“+data_return) (li_lrow)【18】為了在一次通訊結(jié)束后為下次通信做準(zhǔn)備,同時也保證在server方和cliient方通信時是使用的同一socket,可在sendplete事件中人為關(guān)閉先前建立的socket:()li_lrow=(0)(li_lrow,”ms”,”遠(yuǎn)程端口”=remote_IP+”斷開連接”) ()li_lrow=(0)(li_lrow,”ms”,”端口處于偵聽狀態(tài)”) 程序設(shè)計時應(yīng)注意的在進(jìn)行異步選擇使用WSAAsyncSelect()函數(shù)時,有以下幾點(diǎn)需要引起特別的注意:1. 連續(xù)使用兩次WSAAsyncSelect()函數(shù)時,只有第二次設(shè)置的事件有效,如: WSAAsyncSelect(s,hwnd,wMsg1,FD_READ)。 WSAAsyncSelect(s,hwnd,wMsg2,FD_CLOSE)。 這樣只有當(dāng)FD_CLOSE事件發(fā)生時才會發(fā)送wMsg2消息。2.可以在設(shè)置過異步選擇后通過再次調(diào)用WSAAsyncSelect(s,hwnd,0,0)。的形式取消在套接字上所設(shè)置的異步事件。3.Windows Sockets DLL在一個網(wǎng)絡(luò)事件發(fā)生后,通常只會給相應(yīng)的應(yīng)用程序發(fā)送一個消息,而不能發(fā)送多個消息。但通過使用一些函數(shù)隱式地允許重發(fā)此事件的消息,這樣就可能再次接收到相應(yīng)的消息。4.在調(diào)用過closesocket()函數(shù)關(guān)閉套接字之后不會再發(fā)生FD_CLOSE事件。以上基本完成了服務(wù)器方的程序設(shè)計,下面對于客戶端的實(shí)現(xiàn)則要簡單多了,在用socket()創(chuàng)建完套接字之后只需通過調(diào)用connect()完成同服務(wù)器的連接即可,剩下的工作同服務(wù)器完全一樣:用send()/recv()發(fā)送/接收收據(jù),用closesocket()關(guān)閉套接字: =AF_INET。 //地址族 =IPaddr。 //指定服務(wù)器的IP地址 =m_Port。 //指定連接的端口號 int nConnect=connect(sock,(LPSOCKADDR)amp。sockin,sizeof(sockin))。 4 基于TCP/IP協(xié)議的網(wǎng)絡(luò)編程 TCP/IP 體系結(jié)構(gòu)與特點(diǎn) TCP/IP體系結(jié)構(gòu)TCP/IP協(xié)議實(shí)際上就是在物理網(wǎng)上的一組完整的網(wǎng)絡(luò)協(xié)議。其中TCP是提供傳輸層服務(wù),而IP則是提供網(wǎng)絡(luò)層服務(wù)。TCP/IP包括以下協(xié)議:IP: 網(wǎng)間協(xié)議(Internet Protocol) 負(fù)責(zé)主機(jī)間數(shù)據(jù)的路由和網(wǎng)絡(luò)上數(shù)據(jù)的存儲。同時為ICMP,TCP,UDP提供分組發(fā)送服務(wù)。用戶進(jìn)程通常不需要涉及這一層。ARP: 地址解析協(xié)議(Address Resolution Protocol)此協(xié)議將網(wǎng)絡(luò)地址映射到硬件地址。RARP: 反向地址解析協(xié)議(Reverse Address Resolution Protocol)此協(xié)議將硬件地址映射到網(wǎng)絡(luò)地址ICMP: 網(wǎng)間報文控制協(xié)議(Internet Control Message Protocol)此協(xié)議處理信關(guān)和主機(jī)的差錯和傳送控制。TCP: 傳送控制協(xié)議(Transmission Control Protocol)這是一種提供給用戶進(jìn)程的可靠的全雙工字節(jié)流面向連接的協(xié)議。它要為用戶進(jìn)程提供虛電路服務(wù),并為數(shù)據(jù)可靠傳輸建立檢查。
點(diǎn)擊復(fù)制文檔內(nèi)容
教學(xué)課件相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖片鄂ICP備17016276號-1