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

正文內(nèi)容

socket編程實(shí)驗(yàn)報(bào)告-文庫(kù)吧資料

2025-05-29 18:08本頁(yè)面
  

【正文】 nclude include include arpa/ define MAX_SIZE 1024 define PORT 7000 define HOST_ADDR int main(int argc,char **argv) { int sockfd,buflen。client,l)。 fgets(buf1,300,stdin)。 printf (Received line: %s\n, buf)。l)。 pktlen = recvfrom (sockfd, buf, sizeof (buf), 0,(struct sockaddr_in *)amp。 for (。//設(shè)置網(wǎng)絡(luò)地址,INADDR_ANY表示機(jī)器的IP地址bind(sockfd,(struct sockaddr *)amp。 = htons(PORT)。server, sizeof(server), 0)。sockfd=socket(AF_INET,SOCK_DGRAM,0)。 char buf[300],buf1[300]。我覺(jué)得雖然Windows和Linux的socket使用總體上差不多,但是Winsock的一些準(zhǔn)備(我覺(jué)得比較冗余)復(fù)雜一點(diǎn)。雖然操作系統(tǒng)不同,socket庫(kù)不同,但是只要使用了相同的協(xié)議(我選擇的是UDP)就可以進(jìn)行通信。對(duì)于UDP的client端來(lái)說(shuō),只需要在發(fā)送數(shù)據(jù)的時(shí)候用sendto來(lái)表明server的地址,在接收數(shù)據(jù)時(shí)就不需要的了,因?yàn)橹挥幸粋€(gè)server,不需要標(biāo)記了。為了辨別多個(gè)client,server需要client的地址(ip+port)來(lái)接受和發(fā)送,于是就要用recvfrom多出來(lái)的2個(gè)參數(shù),即client的地址和地址長(zhǎng)度。于是我仔細(xì)比較了幾個(gè)函數(shù)的參數(shù),發(fā)現(xiàn)recvfrom比recv多了2個(gè)參數(shù),后來(lái)理解了一下,這是因?yàn)門(mén)CP在accept時(shí)就為與之通信的每個(gè)進(jìn)程分配了一個(gè)socket用于數(shù)據(jù)傳輸,也就是說(shuō)對(duì)于server的每個(gè)client都有一個(gè)專(zhuān)門(mén)的進(jìn)程與其進(jìn)行通信。對(duì)于client來(lái)講,我也是直接用的這兩個(gè)函數(shù)。對(duì)于server來(lái)講,bind()之后,不用再listen和accept了,就是不用監(jiān)聽(tīng)了,直接用這個(gè)socket來(lái)進(jìn)行數(shù)據(jù)傳輸就可以了。其實(shí)這順序是反了的,因?yàn)閁DP貌似更簡(jiǎn)單一些,可是因?yàn)門(mén)CP有現(xiàn)成的代碼,所以就先理解了TCP。這樣每個(gè)方向上都有一個(gè)FIN和ACK。它的接收也作為文件結(jié)束符傳遞給server的應(yīng)用程序,因?yàn)镕IN的接收意味著server的應(yīng)用進(jìn)程在相應(yīng)的連接上再也接收不到額外數(shù)據(jù);一段時(shí)間之后,server上接收到文件結(jié)束符的應(yīng)用進(jìn)程調(diào)用close關(guān)閉它的socket。當(dāng)我把client關(guān)掉時(shí),server就自動(dòng)關(guān)掉了。于是就又定義了一個(gè)buf3,用gets函數(shù)接受標(biāo)準(zhǔn)輸入到buf3里,然后用把buf3的內(nèi)容發(fā)給client。此外,我大概理解了TCP的三次握手在函數(shù)中的體現(xiàn),要傳三個(gè)報(bào)文,如圖1。從這個(gè)層面上講,socket是一個(gè)TCP協(xié)議提供的接口服務(wù),用傳輸層的協(xié)議干應(yīng)用層想干的事。而recv所做的把發(fā)送緩沖區(qū)里的數(shù)據(jù)被協(xié)議發(fā)送到接收緩沖區(qū)這個(gè)過(guò)程對(duì)于編程用戶(hù)來(lái)講是不可見(jiàn)的,而recv只是把接收緩沖區(qū)里的數(shù)據(jù)copy出來(lái)而已。關(guān)于收發(fā)函數(shù),我又上網(wǎng)查了一下資料。accept之后就可以自由發(fā)揮,開(kāi)始進(jìn)行網(wǎng)絡(luò)I/0了!我們運(yùn)行程序時(shí)可以看到的功能就是在下面的部分實(shí)現(xiàn)的。一旦accept()了一個(gè)client的請(qǐng)求,就獲得了這個(gè)client的地址,這真是個(gè)很神奇的東東?。〔僮飨到y(tǒng)就會(huì)又給它分配了一個(gè)socket,也就是accept的返回值,用來(lái)傳輸數(shù)據(jù)。bind()是用來(lái)為這個(gè)socket綁定server的IP+port地址,當(dāng)然綁定之前要先對(duì)server的地址進(jìn)行初始化。我先對(duì)照著《一切皆socket》的帖子看老師給的資料附錄一中的示例一、二,也就是TCP。操作系統(tǒng)的課程也有一個(gè)做shell命令解釋器的實(shí)驗(yàn),與socket編程實(shí)驗(yàn)基本是先后進(jìn)行的。抱著這種決心,我開(kāi)始了學(xué)習(xí)。老師說(shuō)讓我們做這個(gè)實(shí)驗(yàn)主要是為了體會(huì)TCP/IP的原理,并不要求應(yīng)用做得多么高端,比如圖形界面什么的。 實(shí)驗(yàn)結(jié)果server和client通信截圖圖7 TCPserver圖8 TCPserver三、討論與心得記得助教第一節(jié)課講socket的時(shí)候,我聽(tīng)得云里霧里的,只覺(jué)得是個(gè)很神奇的可以實(shí)現(xiàn)進(jìn)程間通信的類(lèi)似于接口的東西。最后用close()關(guān)閉該數(shù)據(jù)傳輸socket和監(jiān)聽(tīng)socket。 client端:首先調(diào)用socket函數(shù)創(chuàng)建一個(gè)Socket,初始化server地址及端口號(hào),然后調(diào)用connet請(qǐng)求連接監(jiān)聽(tīng)server。Recv( )接收到一個(gè)client端的消息后,server從標(biāo)準(zhǔn)輸入設(shè)備中取得一行字符串,調(diào)用send()發(fā)送給client端。圖6 實(shí)現(xiàn)方案216。一旦數(shù)據(jù)傳輸結(jié)束,server和client通過(guò)調(diào)用close( )來(lái)關(guān)閉套接字。在client端,client在創(chuàng)建套接字并指定client的socket地址,然后就調(diào)用connect( )和server建立連接。方案2實(shí)驗(yàn)結(jié)果server和clie
點(diǎn)擊復(fù)制文檔內(nèi)容
規(guī)章制度相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1