8.19作業

1.聊天室

1.1服務器

#include <myhead.h>
#define SER_PORT 8888
#define SER_IP "192.168.174.128"struct msg
{char type;char usrname[20];char msgtext[1024];
};int main(int argc, const char *argv[])
{int sfd = socket(AF_INET,SOCK_STREAM,0);if (sfd==-1){ERRLOG("socket");}int reuse = 1;if(setsockopt(sfd, SOL_SOCKET, SO_REUSEADDR, &reuse, sizeof(reuse))==-1){perror("setsockopt error");return -1;}struct sockaddr_in sin;sin.sin_family=AF_INET;sin.sin_port=htons(SER_PORT);sin.sin_addr.s_addr=inet_addr(SER_IP);if (-1==bind(sfd,(struct sockaddr*)&sin,sizeof(sin))){ERRLOG("bind");}if (-1==listen(sfd,128)){ERRLOG("listen");}struct sockaddr_in cin;socklen_t addrlen =sizeof(cin);fd_set readfds;FD_ZERO(&readfds);FD_SET(0,&readfds);FD_SET(sfd,&readfds);fd_set tempfds;char wbuf[128]="";struct sockaddr_in cin_arr[1024];int new_fd=-1;int maxfd=sfd;printf("---------服務器----------\n");while (1){tempfds=readfds;int res=select(maxfd+1,&tempfds,NULL,NULL,NULL);if (res==-1){ERRLOG("select");}else if (res==0){printf("timeout\n");return -2;}if (FD_ISSET(sfd,&tempfds)){new_fd=accept(sfd,(struct sockaddr*)&cin,&addrlen);if (new_fd==-1){ERRLOG("accept");}FD_SET(new_fd,&readfds);cin_arr[new_fd]=cin;if (new_fd>maxfd){maxfd=new_fd;}}if(FD_ISSET(0, &tempfds)){scanf("%s", wbuf);printf("觸發終端輸入事件:%s\n", wbuf);//講消息發送給所有的客戶端for(int i=4; i<=maxfd; i++){send(i, wbuf, strlen(wbuf), 0);}}for (int i=4;i<=maxfd;i++){if (!FD_ISSET(i,&tempfds)){continue;}struct msg msgbuf;int ret=recv(i,&msgbuf,sizeof(msgbuf),0);if (ret==0){printf("-----%s退出聊天室-------\n",msgbuf.usrname);char quit[128]="------";strcat(quit,msgbuf.usrname);strcat(quit,"退出聊天室---------\n");for (int j=4; j<=maxfd;j++ ){if (j!=i&&FD_ISSET(j,&readfds)){send(j,quit,strlen(quit),0);}}close(i);FD_CLR(i,&readfds);for (int k=maxfd;k>=0 ;k-- ){if (FD_ISSET(k,&readfds)){maxfd=k;break;}}break;}if (ret==-1){close(i);ERRLOG("recv");}if (msgbuf.type=='l'){printf("-----%s進入聊天室-------\n",msgbuf.usrname);char enter[128]="------";strcat(enter,msgbuf.usrname);strcat(enter,"進入聊天室---------\n");for (int j=4; j<=maxfd;j++ ){if (j!=i&&FD_ISSET(j,&readfds)){send(j,enter,strlen(enter),0);}}}if (msgbuf.type=='c'){printf("------%s------:發送了一條信息\n",msgbuf.usrname);char sbuf[128]="---";strcat(sbuf,msgbuf.usrname);strcat(sbuf,"---:");strcat(sbuf,msgbuf.msgtext);for (int j=4; j<=maxfd;j++ ){if (j!=i&&FD_ISSET(j,&readfds)){send(j,sbuf,strlen(sbuf),0);}}}if (msgbuf.type=='q'){printf("-----%s退出聊天室-------\n",msgbuf.usrname);char quit[128]="------";strcat(quit,msgbuf.usrname);strcat(quit,"退出聊天室---------\n");for (int j=4; j<=maxfd;j++ ){if (j!=i&&FD_ISSET(j,&readfds)){send(j,quit,strlen(quit),0);}}close(i);FD_CLR(i,&readfds);for (int k=maxfd;k>=0 ;k-- ){if (FD_ISSET(k,&readfds)){maxfd=k;break;}}break;}}}close(sfd);return 0;
}

1.2客戶端

#include <myhead.h>
#define SER_PORT 8888
#define SER_IP "192.168.174.128"
struct msg
{char type;char usrname[20];char msgtext[1024];
};  
void *fun(void *arg)
{ int sfd = *(int *)arg;while (1){char buf[1100];int ret = recv(sfd, buf, sizeof(buf) - 1, 0); // 留一個位置給字符串結束符if (ret == 0){printf("服務器已關閉..\n");break;}else if (ret == -1){perror("recv error");break;}buf[ret] = '\0'; 		printf("%s", buf);fflush(stdout);}pthread_exit(NULL);
}
int main(int argc, const char *argv[])
{int sfd = socket(AF_INET,SOCK_STREAM,0);if (sfd==-1){ERRLOG("socket");}struct sockaddr_in sin;sin.sin_family=AF_INET;sin.sin_port=htons(SER_PORT);sin.sin_addr.s_addr=inet_addr(SER_IP);if (-1==connect(sfd,(struct sockaddr*)&sin,sizeof(sin))){ERRLOG("connect");}struct msg msgbuf;msgbuf.type='l';printf("請輸入姓名:");fgets(msgbuf.usrname,sizeof(msgbuf.usrname),stdin);msgbuf.usrname[strlen(msgbuf.usrname)-1] = 0;strcpy(msgbuf.msgtext,"\0");send(sfd,&msgbuf,sizeof(msgbuf),0);pthread_t tid;if (0!=pthread_create(&tid,NULL,fun,&sfd)){printf("pthread_create error\n");return -1;}pthread_detach(tid);printf("歡迎進入聊天室,退出請輸入quit...\n");while (1){fgets(msgbuf.msgtext,sizeof(msgbuf.msgtext),stdin);if (strcmp(msgbuf.msgtext,"quit\n")==0){msgbuf.type='q';send(sfd,&msgbuf,sizeof(msgbuf),0);break;}else{msgbuf.type='c';send(sfd,&msgbuf,sizeof(msgbuf),0);}}return 0;
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/93607.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/93607.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/93607.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

95、23種設計模式之建造者模式(4/23)

建造者模式&#xff08;Builder Pattern&#xff09;是23種經典設計模式中的創建型模式之一&#xff0c;其核心思想是將復雜對象的構建過程與其表示分離&#xff0c;使得同樣的構建流程可以生成不同結構或配置的對象。以下從定義、結構、應用場景、優缺點及代碼示例展開分析&am…

LIA-X - 一張照片生成任意表情肖像動畫視頻 精準操控面部動作 支持50系顯卡 一鍵整合包下載

LIA-X 是一個可解釋的潛在肖像動畫生成器&#xff0c;只需要一張照片加一段驅動視頻生成任意表情肖像動畫&#xff0c; 旨在將驅動視頻中的面部動態精細地轉移到源肖像上&#xff0c;同時提供對頭部、嘴巴和眼睛的精細控制。同時支持圖像和視頻的編輯任務&#xff0c;比如對頭部…

Google 的 Opal:重新定義自動化的 AI 平臺

1. 真實世界測試&#xff1a;結果出乎意料 我讓 Opal 接受了三項極具挑戰性的任務&#xff1a; 1.1. 博客生成器挑戰 我的提示&#xff1a;“研究并撰寫一篇關于 2 億美元融資對無代碼&#xff08;no-code&#xff09;影響的文章。” 發生了什么&#xff1a;Opal 不僅僅是寫…

【FreeRTOS】任務通知

任務通知通知狀態的三種取值taskNOT_WAITING_NOTIFICATION&#xff1a;任務沒有在等待通知taskWAITING_NOTIFICATION&#xff1a;任務在等待通知taskNOTIFICATION_RECEIVED&#xff1a;任務接收到了通知&#xff0c;也被稱為 pending(有數據了&#xff0c;待處理)如下面兩個場景…

BEV:隱式相機視角轉換-----BEVFormer

一、背景 基于imp投影的相機視角轉換&#xff0c;對相機的內外參依賴較高&#xff0c;BEV 網格融合固定&#xff0c;可能對小目標不夠敏感&#xff1b;考慮通過transformer的方式進行相機的視角轉換&#xff0c;BEV query 可以自適應關注關鍵區域&#xff0c;提高小目標檢測&am…

zsh 使用筆記 命令行智能提示 bash智能

目錄 安裝&#xff1a; 升級&#xff1a; zsh 有什么用&#xff1f; zsh 安裝&#xff1a; sudo apt update sudo apt install zsh -y 升級&#xff1a; omz update zsh 有什么用&#xff1f; 相比 bash&#xff0c;zsh 更智能、更方便&#xff0c;常見優勢有&#xff…

Laya的適配模式選擇

文章目錄SCALE_FIXED_AUTOSCALE_SHOWALLSCALE_FULLSCALE_FIXED_HEIGHTSCALE_FIXED_WIDTHSCALE_NOSCALESCALE_EXACTFITSCALE_NOBORDERdemoSCALE_FIXED_AUTO NO.1會透&#xff0c;拉伸能解決官網解釋&#xff1a;應用保持設計比例不變&#xff0c;全屏顯示全部內容(類似showall&…

Android中flavor的使用

在我的開發中&#xff0c;有這樣的需求&#xff0c;有一個項目&#xff0c;需要適配不同的執法儀設備&#xff0c;這些執法儀都是Android系統的&#xff0c;而且有的有系統簽名&#xff0c;有的沒有&#xff0c;比如我共有四款型號&#xff0c;有三款有系統簽名&#xff0c;每款…

如何使用DeepSeek解析長pdf的文本

直接使用python工具解析pdf文件&#xff0c;可能因為格式兼容問題&#xff0c;導致解析出的文本幾乎不可讀。 這里嘗試使用Deepseek解析pdf文件&#xff0c;這里僅考慮文本&#xff0c;不考慮其他要素。 1 解析第一步 將pdf作為附件上傳到deepseekchat界面&#xff0c;輸入如…

W3C CSS 活動

W3C CSS 活動 引言 CSS(層疊樣式表)是現代網頁設計中不可或缺的技術之一。W3C(萬維網聯盟)作為全球互聯網標準制定的主要組織,定期舉辦各類CSS相關的活動,旨在促進CSS技術的發展與普及。本文將詳細介紹W3C CSS活動,包括活動內容、參與方式以及活動意義。 活動內容 1…

React Native 與 UniApp 對比

React Native 優點: 由 Facebook 開發維護&#xff0c;社區生態強大 使用 JavaScript/TypeScript 開發&#xff0c;學習曲線相對平緩 真正的原生渲染&#xff0c;性能接近原生應用 支持熱重載&#xff0c;開發效率高 可訪問所有原生平臺 API 大型應用案例豐富(如 Faceboo…

Dijkstra和多層圖 0

眾所周知&#xff0c;Dijkstra經常拿來解決不帶負權和環的單元最短路。我們先來看一下他的實現過程 (由于樸素版用的不多&#xff0c;我們直接上堆優化) 模板 #include<bits/stdc.h> #define mf(x,y) make_pair(x,y)//x距離&#xff0c;y節點 using namespace std; …

【驅動】RK3576:桌面操作系統基本概念

1、桌面操作系統 我們常說的Ubuntu、Debian、麒麟、統信等都是總包工頭; 他們把linux內核、根文件系統(遵循 Linux 標準文件系統層次結構FHS)、包管理(軟件、庫)、桌面環境(GNOME、Xfce等)、初始化系統(Systemd)、各種服務與守護進程、安全組件等整合成一個完整的桌面…

sfc_os!SfcQueueValidationRequest函數分析之sfc_os!IsFileInQueue

第一部分&#xff1a;1: kd> kc# 00 sfc_os!SfcQueueValidationRequest 01 sfc_os!SfcWatchProtectedDirectoriesWorkerThread 02 kernel32!BaseThreadStart1: kd> dvRegVal 0x01129164ChangeType 5vrd 0x012bfef0Status 0n1988337684vrdexisting 0x012bffdc//// if…

100202Title和Input組件_編輯器-react-仿低代碼平臺項目

文章目錄1 開發兩個問卷組件1.1 Title組件1.2 Input組件1.3 畫布靜態展示TItle和Input2 Ajax獲取問卷數據&#xff0c;并存儲到Redux store2.1 API接口2.2 組件列表存儲到Redux store統一管理2.3 重構useLoadQuestionData3 在畫布顯示問卷列表&#xff0c;點擊可選中3.1 Redux獲…

設置計劃任務自動備份mysql

windows系統下1.創建mysql自動備份腳本mysqlback.bat需將此腳本存放在mysql的bin文件夾下。確保此腳本執行成功了在進行第2步做計劃任務。echo off REM 定義備份目錄backup_dir、備份的文件名filename set "backup_dirD:\mysqlback" set "filenamemysqlback_%da…

飛機起落架輪軸深孔中間段電解擴孔內輪廓檢測 - 激光頻率梳 3D 輪廓檢測

摘要&#xff1a;飛機起落架輪軸深孔中間段電解擴孔內輪廓檢測存在精度要求高、結構復雜等挑戰。本文針對電解擴孔特殊工藝特征&#xff0c;探討激光頻率梳 3D 輪廓檢測技術的應用&#xff0c;分析其檢測原理、技術優勢及在輪軸深孔檢測中的實踐&#xff0c;為電解擴孔內輪廓高…

【軟考中級網絡工程師】知識點之入侵防御系統:筑牢網絡安全防線

目錄一、入侵防御系統基礎概念1.1 定義與作用1.2 與其他安全設備的關系二、入侵防御系統工作原理剖析2.1 數據包捕獲與預處理2.2 深度包檢測&#xff08;DPI&#xff09;技術2.3 威脅特征匹配2.4 行為分析與機器學習輔助檢測2.5 威脅處理與響應機制三、入侵防御系統功能全面解析…

Python爬蟲實戰:研究scrapfly-scrapers庫,構建電商/新聞/社交媒體數據采集系統

1. 引言 1.1 研究背景與意義 在大數據與人工智能技術深度滲透各行業的背景下,數據已成為企業決策、學術研究、產品創新的核心驅動力。互聯網作為全球最大的信息載體,蘊含海量結構化與非結構化數據(如電商商品信息、新聞資訊、社交媒體動態等),其價值挖掘依賴高效的數據采…

Python爬蟲反爬檢測失效問題的代理池輪換與請求頭偽裝實戰方案

Python爬蟲反爬檢測失效問題的代理池輪換與請求頭偽裝實戰方案 &#x1f31f; Hello&#xff0c;我是摘星&#xff01; &#x1f308; 在彩虹般絢爛的技術棧中&#xff0c;我是那個永不停歇的色彩收集者。 &#x1f98b; 每一個優化都是我培育的花朵&#xff0c;每一個特性都是…