日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人工智能 > ChatGpt >内容正文

ChatGpt

shutdown函数和FIN_WAIT2状态

發布時間:2025/6/15 ChatGpt 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 shutdown函数和FIN_WAIT2状态 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

? ? ? ? ? ?玩過英雄聯盟的人都不會對shutdown感到陌生,就是你連殺被終結了嘛。在網絡編程中也差不多是這個意思,準確來說是從容關閉。有啥用呢?來看代碼吧

?

[mapan@localhost TCP]$ ls client.cpp makefile server.cpp [mapan@localhost TCP]$ cat server.cpp #include <unistd.h> #include <sys/types.h> #include <sys/socket.h> #include <netdb.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <ctype.h> #include <errno.h> #include <malloc.h> #include <netinet/in.h> #include <arpa/inet.h> #include <sys/ioctl.h> #include <stdarg.h> #include <fcntl.h> #include <sys/types.h> #include <sys/wait.h> #include <netinet/in.h> #include <arpa/inet.h> #include <signal.h> #define MAXLINE 4096int main() {int listenfd,connfd;pid_t childpid;socklen_t clilen;struct sockaddr_in cliaddr,servaddr;listenfd=socket(AF_INET,SOCK_STREAM,0);bzero(&servaddr,sizeof(servaddr));servaddr.sin_family=AF_INET;servaddr.sin_addr.s_addr=htonl(INADDR_ANY);servaddr.sin_port=htons(8888);bind(listenfd,(struct sockaddr *)&servaddr,sizeof(servaddr)); listen(listenfd,1);clilen=sizeof(cliaddr);connfd=accept(listenfd,(struct sockaddr *)&cliaddr,&clilen);char recvBuf[100]={0};char sendBuf[100]={0};getchar();recv(connfd,recvBuf,100-1,0);printf("%s\n",recvBuf); scanf("%s",sendBuf);send(connfd,sendBuf,strlen(sendBuf)+1,0);printf("sendBuf=%s",sendBuf);getchar();getchar();close(connfd);close(listenfd);return 0; } [mapan@localhost TCP]$ cat client.cpp #include <unistd.h> #include <sys/types.h> #include <sys/socket.h> #include <netdb.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <ctype.h> #include <errno.h> #include <malloc.h> #include <netinet/in.h> #include <arpa/inet.h> #include <sys/ioctl.h> #include <stdarg.h> #include <fcntl.h> #include <sys/types.h> #include <sys/wait.h> #include <netinet/in.h> #include <arpa/inet.h> #include <signal.h> #define MAXLINE 4096int main() {int sockfd;struct sockaddr_in servaddr;sockfd=socket(AF_INET,SOCK_STREAM,0);bzero(&servaddr,sizeof(servaddr));servaddr.sin_family=AF_INET;servaddr.sin_port=htons(8888);servaddr.sin_addr.s_addr=inet_addr("127.0.0.1");int ret=connect(sockfd,(struct sockaddr *)&servaddr,sizeof(servaddr));char sendBuf[100]={0};char recvBuf[100]={0};scanf("%s",sendBuf);send(sockfd,sendBuf,strlen(sendBuf)+1,0);close(sockfd);return 0; } [mapan@localhost TCP]$ cat makefile all:server clientserver.o:server.cppg++ -c server.cpp client.o:client.cppg++ -c client.cpp server:server.og++ -o server server.o client:client.og++ -o client client.oclean:rm -f server client *.o [mapan@localhost TCP]$

?

執行:

?

[mapan@localhost TCP]$ make g++ -c server.cpp g++ -o server server.o g++ -c client.cpp g++ -o client client.o [mapan@localhost TCP]$ ls client client.cpp client.o makefile server server.cpp server.o [mapan@localhost TCP]$ ./server

?

?

此時服務端卡在getchar(),不能接受數據。再打開一個窗口,運行客戶端,輸入數據,按回車鍵,此時客戶端close了。

[mapan@localhost TCP]$ ./client?
123
[mapan@localhost TCP]$?

?

查看網絡狀態:

?

[mapan@localhost ~]$ netstat -na | grep 8888 tcp 0 0 0.0.0.0:8888 0.0.0.0:* LISTEN tcp 0 0 127.0.0.1:34998 127.0.0.1:8888 FIN_WAIT2 tcp 5 0 127.0.0.1:8888 127.0.0.1:34998 CLOSE_WAIT

由于服務端沒有接收客戶單發送的數據,所以客戶單發送的數據還在服務端的接收緩沖區里面,123\0+FIN剛好5個字節。服務端按下回車鍵,并查看網絡狀態。

?

?

[mapan@localhost TCP]$ ./server 123 [mapan@localhost ~]$ netstat -na | grep 8888 tcp 0 0 0.0.0.0:8888 0.0.0.0:* LISTEN tcp 0 0 127.0.0.1:35000 127.0.0.1:8888 FIN_WAIT2 tcp 0 0 127.0.0.1:8888 127.0.0.1:35000 CLOSE_WAIT

那個5消失了,則服務端應用進程接收到了數據。然后在服務端輸入1111111111,查看網絡狀態

?

?

[mapan@localhost ~]$ netstat -na | grep 8888 tcp 0 0 0.0.0.0:8888 0.0.0.0:* LISTEN

服務端一發送數據就直接斷開連接了,因為客戶端調用了close,服務端向一個已關閉的套接字發送數據(端口已沒在使用,未打開),客戶端直接回復RST,然后段斷開連接。但是書上說:FIN_WAIT2下的主動端可以接收被動端發送過來的數據啊,但是上述情況好像和書上說的不一致。說到這里,shutdown的作用就能體現出來了。順便說一下,close socket之后,ACK和FIN這種信號是可以傳遞的,它們通過協議棧接收并且判斷是否接收到,close只是作用于應用進程。

?

?

改動客戶端代碼如下:

?

[mapan@localhost TCP]$ cat client.cpp #include <unistd.h> #include <sys/types.h> #include <sys/socket.h> #include <netdb.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <ctype.h> #include <errno.h> #include <malloc.h> #include <netinet/in.h> #include <arpa/inet.h> #include <sys/ioctl.h> #include <stdarg.h> #include <fcntl.h> #include <sys/types.h> #include <sys/wait.h> #include <netinet/in.h> #include <arpa/inet.h> #include <signal.h> #define MAXLINE 4096int main() {int sockfd;struct sockaddr_in servaddr;sockfd=socket(AF_INET,SOCK_STREAM,0);bzero(&servaddr,sizeof(servaddr));servaddr.sin_family=AF_INET;servaddr.sin_port=htons(8888);servaddr.sin_addr.s_addr=inet_addr("127.0.0.1");int ret=connect(sockfd,(struct sockaddr *)&servaddr,sizeof(servaddr));char sendBuf[100]={0};char recvBuf[100]={0};scanf("%s",sendBuf);send(sockfd,sendBuf,strlen(sendBuf)+1,0);shutdown(sockfd,SHUT_WR);recv(sockfd,recvBuf,100-1,0);printf("%s\n",recvBuf);getchar();getchar();close(sockfd);return 0; }


接著執行make clean && make,開啟服務端和客戶端,操作同上。客戶端發送數據后,執行shutdown。

?

?

[mapan@localhost ~]$ netstat -na | grep 8888 tcp 0 0 0.0.0.0:8888 0.0.0.0:* LISTEN tcp 0 0 127.0.0.1:35008 127.0.0.1:8888 FIN_WAIT2 tcp 5 0 127.0.0.1:8888 127.0.0.1:35008 CLOSE_WAIT [mapan@localhost ~]$

?

?

看到沒有,執行shutdown之后,客戶單確實發送了FIN信號,并且接收到了服務端的ACK信號,然后客戶端處于FIN_WAIT2狀態。然后服務端向客戶端發送數據。

?

[mapan@localhost TCP]$ ./server 123 11111111 sendBuf=11111111 [mapan@localhost TCP]$ ./client 12311111111

此時客戶端接收到了數據,則證明客戶端在FIN_WAIT2狀態下是能接收到數據的。

?

現在大家對FIN_WAIT2狀態和shutdown有了一定的了解了吧。


?




?

?

?

?

?

?

?

?

總結

以上是生活随笔為你收集整理的shutdown函数和FIN_WAIT2状态的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 免费a网| 日本大尺度床戏揉捏胸 | 中文字幕校园春色 | 怡红院成人网 | 日韩乱论 | 亚洲色偷偷综合亚洲av伊人 | 51ⅴ精品国产91久久久久久 | 午夜寂寞影院在线观看 | 日韩精品一区二区亚洲av性色 | 青娱乐最新官网 | 国产精品免费无遮挡无码永久视频 | 欧美精品免费一区二区 | 日本免费一区二区三区 | www.自拍偷拍 | 五十路av| 日韩av在线直播 | 午夜时刻免费入口 | 国产成人精品无码播放 | 精品无码久久久久久久久久 | 精品国产一二三区 | 黄色的网站在线 | 我爱avav色aⅴ爱avav | 黄色在线小视频 | 91丨porny丨对白 | 青青草自拍视频 | 亚洲综合色在线观看 | 亚洲精品色图 | 国产视频污在线观看 | 人妻视频一区二区三区 | mm131国产精品 | 亚洲综合免费观看高清完整版在线 | 男女午夜影院 | 成人福利视频在线观看 | xxx老太太 | 欧美视频二区 | 91丨九色丨蝌蚪丨丝袜 | 欧美日韩视频在线观看一区 | 苏晴忘穿内裤坐公交车被揉到视频 | 影音先锋人妻啪啪av资源网站 | 欧美v日韩 | 久久久久久久黄色 | 国产三级伦理片 | 亚洲欧美日韩久久精品 | 不卡久久 | 欧美精品成人在线 | 日本一级免费视频 | 国产传媒精品 | 色婷婷综合在线 | 日本色综合网 | 小嫩嫩精品导航 | www裸玉足久久久 | 亚洲区一区二 | 亚洲精品黄 | 91精品久久香蕉国产线看观看 | 在线一级| 日韩欧美在线观看一区二区 | 国产精品二三区 | 影音先锋中文字幕一区 | 第一宅男av导航入口 | 美痴女~美人上司北岛玲 | 欧美一级性片 | 国产美女精品久久 | 欧美三级视频在线 | 天天干天天操天天碰 | 成人免费视频大全 | 成人免费毛片色戒 | 少妇又色又爽又黄的视频 | 一眉道姑 电影 | 黄色99视频| www国产亚洲精品久久网站 | 亚洲蜜桃视频 | 欧美另类自拍 | 亚洲区久久 | 91av在线免费视频 | 亚洲网站一区 | 69社| 国产色网| 亚洲欧美一区二区三区情侣bbw | 91资源在线视频 | 999黄色片| 伊人久操 | 亚洲成年人网站在线观看 | 伊人久久大香线蕉成人综合网 | 1000部国产精品成人观看 | 久操福利 | 亚洲AV无码乱码国产精品牛牛 | 富婆如狼似虎找黑人老外 | 伊人日日夜夜 | 无码少妇一区二区三区 | 欧美v日韩 | 欧美三级特黄 | av片免费在线 | 综合色导航 | 日本三级吃奶头添泬 | av在线免费观看不卡 | 亚洲生活片 | 亚洲女同女同女同女同女同69 | 亚洲久久久久久久 | 成年人看片网站 |