简易TCP服务器搭建
目錄
一、套接字及其分類
二、相關(guān)接口函數(shù)
三、TCP服務(wù)器搭建流程
1、創(chuàng)建套接字socket()
2、保存服務(wù)器信息
3、套接字綁定
4、監(jiān)聽客戶端連接請(qǐng)求
5、接收客戶端連接請(qǐng)求
6、數(shù)據(jù)收發(fā)
7、關(guān)閉套接字
四、運(yùn)行結(jié)果
一、套接字及其分類
????????所謂套接字(Socket),就是對(duì)網(wǎng)絡(luò)中不同主機(jī)上的應(yīng)用進(jìn)程之間進(jìn)行雙向通信的端點(diǎn)的抽象。一個(gè)套接字就是網(wǎng)絡(luò)上進(jìn)程通信的一端,提供了應(yīng)用層進(jìn)程利用網(wǎng)絡(luò)協(xié)議交換數(shù)據(jù)的機(jī)制。從所處的地位來(lái)講,套接字上聯(lián)應(yīng)用進(jìn)程,下聯(lián)網(wǎng)絡(luò)協(xié)議棧,是應(yīng)用程序通過(guò)網(wǎng)絡(luò)協(xié)議進(jìn)行通信的接口,是應(yīng)用程序與網(wǎng)絡(luò)協(xié)議棧進(jìn)行交互的接口
流式套接字(SOCK_STREAM): ????????數(shù)據(jù)以字節(jié)流的方式進(jìn)行傳遞,無(wú)大小限制.保證數(shù)據(jù)可靠,無(wú)丟失, 順序發(fā)送.主要用于TCP協(xié)議. 一般情況下只要選擇流式方式,那內(nèi)核就會(huì)默認(rèn)選擇TCP傳輸層協(xié)議 數(shù)據(jù)報(bào)套接字(SOCK_DGRAM ): ????????主要通過(guò)數(shù)據(jù)報(bào)的方式發(fā)送,固定大小。不能保證數(shù)據(jù)可靠,可能 丟失,亂序發(fā)送.主要用于UDP協(xié)議. 一般情況下只要選擇數(shù)據(jù)報(bào)方式,那內(nèi)核就會(huì)默認(rèn)選擇UDP傳 輸層協(xié)議 原始套接字(SOCK_RAW): ????????可以對(duì)較低層次協(xié)議如IP、ICMP直接訪問(wèn)二、相關(guān)接口函數(shù)
socket(); 創(chuàng)建套接字. bind(); 綁定套接字 listen(); 監(jiān)聽 accept(); 接收客戶端連接請(qǐng)求 connect(); 主動(dòng)發(fā)送連接請(qǐng)求 close(); 關(guān)閉套接字 read()/write(); 數(shù)據(jù)收發(fā)三、TCP服務(wù)器搭建流程
1、創(chuàng)建套接字socket()
//創(chuàng)建套接字int sockfd = socket(AF_INET, SOCK_STREAM, 0);if(sockfd == -1){perror("socket");exit(-1);}2、保存服務(wù)器信息
//保存地址信息struct sockaddr_in addr;//該結(jié)構(gòu)體用于保存某個(gè)網(wǎng)絡(luò)地址addr.sin_family = AF_INET;//設(shè)置地址族為IPV4addr.sin_port = htons(9090);//設(shè)置端口號(hào)addr.sin_addr.s_addr = inet_addr("192.168.22.84");//分配IP地址,此處涉及兩層結(jié)構(gòu)體3、套接字綁定
//套接字綁定if( bind(sockfd, (struct sockaddr *)&addr, sizeof(addr) ) == -1){perror("bind");exit(-1);}printf("綁定成功\n");4、監(jiān)聽客戶端連接請(qǐng)求
if( listen(sockfd, 5) == -1 ){perror("監(jiān)聽:");exit(-1);}printf("監(jiān)聽成功\n");5、接收客戶端連接請(qǐng)求
//接收客戶端請(qǐng)求//獲取通信(連接)套接字,后續(xù)通信使用通信套接字,不使用監(jiān)聽套接字int comfd = accept(sockfd, NULL, NULL);if(comfd == -1){perror("獲取通信套接字");exit(-1);}printf("通信套接字獲取成功(接收成功)\n");6、數(shù)據(jù)收發(fā)
//數(shù)據(jù)收發(fā)開始while(1){//memset(buf, 0, N);read(comfd, buf, N);puts(buf);//sleep(1);}//數(shù)據(jù)收發(fā)結(jié)束7、關(guān)閉套接字
//關(guān)閉套接字close(comfd);close(sockfd);四、運(yùn)行結(jié)果
服務(wù)器顯示運(yùn)行結(jié)果:
?1、單獨(dú)運(yùn)行服務(wù)器,客戶端未連接
2、客戶端連接服務(wù)器,但未發(fā)送數(shù)據(jù)
(1)、客戶端
(2)、服務(wù)器
3、客戶端發(fā)送數(shù)據(jù)
(1)客戶端
?(2)服務(wù)器
4、多次測(cè)試結(jié)果
好的,以上就是本期內(nèi)容了!!!
歡迎大家參考,指正!!!
總結(jié)
以上是生活随笔為你收集整理的简易TCP服务器搭建的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 在SQL Server 2014下面使用
- 下一篇: SEO网站优化最高境界是无刀胜有刀