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

正文內(nèi)容

基于socket的聊天系統(tǒng)設(shè)計(存儲版)

2024-12-20 03:28上一頁面

下一頁面
  

【正文】 socket,返回值為 FAIL *參數(shù)說明 : client_socket 是服務(wù)器與用戶通信的 socket *依賴自定義數(shù)據(jù)結(jié)構(gòu) : struct user 本文件 *依賴全局變量 : user_table 本文件 * user_table_mutex 本文件 *************************************************************/ int deactive_user(int client_socket) { pthread_mutex_lock(amp。 return SUCCEED。iUSER_AMOUNT_MAX。 pthread_mutex_unlock(amp。server_addr,sizeof(server_addr))。server_addr,sizeof(server_addr))) { printf(Server Bind Port : %d Failed!, CHAT_SERVER_PORT)。 char * user_ID = ((chat_package *)receive_buffer)from。 case GET_USER_LIST: memcpy(, USER_LIST, OPTION_SIZE)。 memcpy(, ((chat_package *)receive_buffer)from, MESSAGE_SIZE)。 send(client_socket, (chat_package *)amp。 int length = recv(new_server_socket,(char*)amp。buffer)。 pthread_attr_t child_thread_attr。client_addr,amp。 pthread_attr_destroy(amp。 // 一個很大的緩沖區(qū) , 實際PASSWORD_SIZEE 內(nèi)有效 static int client_socket。 if( client_socket 0) { printf(Create Socket Failed!\n)。 = AF_INET。 return FAIL。 if(option) memcpy(, option, OPTION_SIZE)。 bzero((char*)amp。 return 。 ftl(client_socket, F_SETFL, flags)。 user_iduser_list_buffer+MESSAGE_SIZE。 while(mand_option!=EXIT){ printf(Command Option:\n)。 scanf(%d,amp。 case LOGIN: printf(Input Your User_ID:)。 case TALK_TO: printf(Input Receiver User_ID:)。 exit(0)。 bzero(option,OPTION_SIZE+1)。 switch(response) { case FAIL: printf(\nRecived From Server: Failed\n)。 exit(1)。 圖 16 注冊用戶 linkway,密碼 222 圖 16 注冊用戶 linkway 圖 17 用戶 linkway 登陸 圖 17 linkway 登陸 圖 18 查詢現(xiàn)在在線用戶名單 圖 18 在線名單 圖 19 bosn 向 linkway 發(fā)起聊天 《網(wǎng)絡(luò)編程》課程設(shè)計 24 圖 19bosn 向 linkway 發(fā)送消息 圖 110linkway 接收 bosn 發(fā)來消息 圖 110 linkway 接收 bosn 消息 1 圖 111 linkway 向 bosn 回復信息 圖 11 linkway 對 bosn 的回復 1 圖 112bosn 接收 linkway 回復信息 圖 112 bosn 接收 linkway 回復 至此,系統(tǒng)已經(jīng)正確完成了用戶 bosn 和 linkway 的注冊、登錄、 聊天功能。當兩個應(yīng)用之間需要采用 SOCKET 通信時,首先需要在兩個應(yīng)用之間(可《網(wǎng)絡(luò)編程》課程設(shè)計 25 能位于同一臺機器,也可能位于不同的機器)建立 SOCKET 連接,發(fā)起呼叫連接請求的一方為客戶方,接受呼叫連接請求的一方成為服務(wù)方。 客戶方發(fā)送的消息可以是文本,也可以是二進制信息流。 【 3】 常志文 , 《 TCP/IP 網(wǎng)絡(luò)互連第 3 卷 :客戶 /服務(wù)器編程及應(yīng)用 :Linux/POSIX Socket》 ,人民郵電出版社 , 2020 年 1 月第一版。 【 11】 劉曉輝 //張劍宇 //張棟 , 《網(wǎng)絡(luò)服務(wù)搭建 配置與管理大全 (Linux 版 )》 , 電子工業(yè)出版社 , 20200301。 《網(wǎng)絡(luò)編程》課程設(shè)計 26 【 9】 (英 )馬修 //(英 )斯通斯 |譯者 :陳健 , 《 Linux 程序設(shè)計 (第 3 版 )》 , 人民郵電出版社 ,20200701。 李朋偉:代碼 處理 , 論文文檔 編寫 。一旦接到連接請求,服務(wù)方可以根據(jù)情況建立或拒絕連接。在 WINDOWS 系統(tǒng)中, SOCKET 稱為 WINSOCK。 圖 13 查詢在線人數(shù) 圖 13 查詢在線人數(shù) (左側(cè) server 端,右側(cè) client 端) 初次運行 系統(tǒng)顯示無人在線。 break。 if(GET_MESSAGE==mand_option) response=receive_result_from_server_noblock(option, message_from, message)。 case GET_MESSAGE: break。 case EXIT: send_request_to_server(mand_option, 0, 0, 0)。 case GET_USER_LIST: send_request_to_server(mand_option, USER_LIST, 0, 0)。 send_request_to_server(mand_option, 0, 0, 0)。 printf(%d:GET_MESSAGE\n,GET_MESSAGE)。 // 一個很大的緩沖區(qū) , 實際ID_SIZE 內(nèi)有效 bzero(receiver_user_ID,BUFFER_SIZE)。 《網(wǎng)絡(luò)編程》課程設(shè)計 19 char * user_id = user_list_buffer。 int length = recv(client_socket,(char*)amp。 if(from) memcpy(from, , ID_SIZE)。 exit(0)。 memcpy(, user_ID, ID_SIZE)。 //向服務(wù)器發(fā)起連接 ,連接成功后 client_socket 代表了客戶機和服務(wù)器的一個 socket 連接 if(connect(client_socket,(struct sockaddr*)amp。 bzero(amp。 //INADDR_ANY 表示自動獲取本機地址 = htons(0)。 } 客戶端 /************************************************************ * 基于 socket 的聊天客戶機 *設(shè)計思路 : * 客戶機提出各種請求 ,服務(wù)器根據(jù)不同請求 ,發(fā)送不同的響應(yīng) . *關(guān)鍵問題 : * 客戶機和 服務(wù)器之間協(xié)議制訂 *************************************************************/ include include // for fork include sys/ // for signal include sys/ // for wait include static char user_ID[BUFFER_SIZE]。child_thread_attr,talk_to_client, (void *)new_server_socket) 0 ) printf(pthread_create Failed : %s\n,strerror(errno))。 socklen_t length = sizeof(client_addr)。 int server_socket = init_server_socket()。 pthread_exit(NULL)。 bzero((char*)amp。 case CHANGE: = user_change_register(user_ID, password, client_socket)。 《網(wǎng)絡(luò)編程》課程設(shè)計 12 client_socket = look_up_socket(receiver)。 case LOGIN: = login(user_ID, password, client_socket)。 bzero((char*)amp。 exit(1)。 } /************************************************************ *函數(shù)名稱 : init_server_socket *功能說明 : 初始化服務(wù)器用于監(jiān)聽的的 socket *正常返回值 : 已經(jīng)初始化的服務(wù)器用于監(jiān)聽的的 socket *函數(shù)執(zhí)行失敗 : 輸出錯誤信息 ,退出程序 *************************************************************/ int init_server_socket() { struct sockaddr_in server_addr。i++) { if(client_socket == user_table[i].client_socket) { memcpy(user_table[i].user_ID,user_ID,USER_ID_SIZE)。 int i=0。 pthread_mutex_unlock(amp。user_table_mutex)。 int i=0。user_table_mutex)。user_table_mutex)。user_table_mutex)。 *依賴自定 義數(shù)據(jù)結(jié)構(gòu) : struct user 本文件 *依賴全局變量 : user_table 本文件 * user_table_mutex 本文件 *************************************************************/ int get_active_user_list(char * user_list_buffer) { pthread_mutex_lock(amp。 pthread_mutex_unlock(amp。 } } /************************************************************ *函數(shù)名稱 : login *正常返回值 : 登錄成功為 SUCCEED,登錄失敗為 FAIL *參數(shù)說明 : client_socket 是服務(wù)器同用戶正在進行通信的 socket *依賴自定義數(shù)據(jù)結(jié)構(gòu) : struct user 本文件 *依賴全局變
點擊復制文檔內(nèi)容
畢業(yè)設(shè)計相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1