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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

linux——回射服务器

發布時間:2025/3/11 linux 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 linux——回射服务器 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

回射服務器即客戶端發送一段數據給服務器,服務器再將這段數據原封不動的發送給客戶端,原理很簡單,原理圖如下:

以TCP協議為例,客戶端、服務器代碼如下:
**

服務器:

**

#include <stdio.h> #include <time.h> #include <string.h> #include <unistd.h> #include <sys/socket.h> #include <arpa/inet.h> #include <netinet/in.h> int main() {struct sockaddr_in server_sockaddr;memset(&server_sockaddr,0,sizeof(server_sockaddr));server_sockaddr.sin_family=AF_INET;server_sockaddr.sin_port=htons(5188);server_sockaddr.sin_addr.s_addr=htonl(INADDR_ANY);//創建一個socketint sockid=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);const int on=1;//設置重復利用端口,如果不設置在頻繁調試時會出現端口被占用情況,導致bind失敗setsockopt(sockid,SOL_SOCKET,SO_REUSEADDR,&on,sizeof(on));//bindif(bind(sockid,(struct sockaddr *)&server_sockaddr,sizeof(server_sockaddr))<0){printf("bind\n");return 0;}//listenif(listen(sockid,SOMAXCONN)<0){printf("listen\n");return 0;}//獲得連接的客戶端信息struct sockaddr_in client_sockaddr;socklen_t client_socklen=sizeof(client_sockaddr);//acceptint client_sock=accept(sockid,(struct sockaddr *)&client_sockaddr,&client_socklen);//打印所連接客戶端ip及端口printf("ip=%s,port=%d\n",inet_ntoa(client_sockaddr.sin_addr),ntohs(client_sockaddr.sin_port));char receive[100]={0};int r_size=0;while(1){//獲取時間,即服務器接收數據的時間time_t timep;time(&timep);memset(receive,0,sizeof(receive));//讀取數據,如果沒有讀到就等待,因為此時read阻塞,如果客戶端關閉read立即返回0if((r_size=read(client_sock,receive,sizeof(receive)))==0){break;}fputs(ctime(&timep),stdout);fputs(receive,stdout);printf("\n");//將讀取到的數據在發給客戶端write(client_sock,receive,r_size);}close(client_sock);close(sockid);return 0; }

客戶端:

#include <stdio.h> #include <string.h> #include <unistd.h> #include <sys/socket.h> #include <netinet/in.h> int main() {struct sockaddr_in sock;memset(&sock,0,sizeof(sock));sock.sin_family=AF_INET;sock.sin_port=htons(5188);sock.sin_addr.s_addr=inet_addr("127.0.0.1");//創建一個socketint sockid=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);socklen_t socklen=sizeof(sock);//connectconnect(sockid,(struct sockaddr *)&sock,socklen);char send[100]={0};char receive[100]={0};while(1){printf("發送: ");//從標準輸入獲取一段數據fgets(send,sizeof(send),stdin);//將這段數據發送給服務器write(sockid,send,strlen(send));printf("接受: ");//讀取來自服務器傳回來的數據read(sockid,receive,sizeof(receive));fputs(receive,stdout);//將這兩個數組清零memset(receive,0,strlen(receive));memset(send,0,strlen(send));}close(sockid);return 0; }

總結

以上是生活随笔為你收集整理的linux——回射服务器的全部內容,希望文章能夠幫你解決所遇到的問題。

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