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

正文內(nèi)容

基于socket的聊天系統(tǒng)設(shè)計(jì)-wenkub

2022-11-21 03:28:22 本頁(yè)面
 

【正文】 utex_t user_table_mutex。 char password[PASSWORD_SIZE]。 }chat_package。 char password[PASSWORD_SIZE +1]。 實(shí)現(xiàn)目標(biāo) 根據(jù)客戶機(jī)提出各種請(qǐng)求 ,服務(wù)器能夠根據(jù)不同請(qǐng)求 ,做出 不同的響應(yīng),能實(shí)現(xiàn)多客戶同時(shí)在線進(jìn)行聊天的功能 。 開(kāi)發(fā)原理 服務(wù)器 : 使用 ServerSocket 監(jiān)聽(tīng)指定的端口,端口可以隨意指定(由于 1024 以下的端口通常屬于保留端口,在一些操作系統(tǒng)中不可以隨意使用,所以使用大于 1024 的端口),等待客戶連接請(qǐng)求,客戶連接后,會(huì)話產(chǎn)生; 在完成會(huì)話后,關(guān)閉連接。 程序通過(guò)了 驗(yàn)證與測(cè)試,證明了系統(tǒng)的 可用性、易用性、完善性。 關(guān)鍵詞: socket、 server、 client、聊天系統(tǒng) 引言 socket 通常也稱 作 套接字 ,用于描述 IP 地址和端口,是一個(gè)通信鏈的句柄。 服務(wù)器端采用多線程 , 為每個(gè)連接的客戶建立一個(gè)服務(wù)線程 ,多客戶端同時(shí)連接服務(wù)器,客戶端之間能夠進(jìn)行會(huì)話。 程序具有簡(jiǎn)單易用性。 char option[OPTION_SIZE +1]。 define BUFFER_SIZE (sizeof(chat_package)) /************************************************************ *選項(xiàng)分類 : * 用戶列表 *************************************************************/ define USER_LIST USER_LIST 服務(wù)器端 /*************************************************************** 一個(gè)基于 socket 的 Linux上的網(wǎng)絡(luò)聊天程序 多線程的服務(wù)器程序 編譯方式 : gcc pthread o chat_server * 基于 socket 的聊天服務(wù)器端 *設(shè)計(jì)思路 : * 客戶機(jī)提出各種請(qǐng)求 ,服務(wù)器根據(jù)不同請(qǐng)求 ,發(fā)送不同的響應(yīng) 。 int client_socket。 /************************************************************ *函數(shù)名稱 : init_user_table *函數(shù)執(zhí)行失敗 : 當(dāng)一個(gè)報(bào)文不能容納全部用戶名稱列表時(shí) ,給出錯(cuò)誤提示信息 ,結(jié)束程序 *依賴自定義數(shù)據(jù)結(jié)構(gòu) : struct user 本文件 *依賴全局變量 : user_table 本文件 *************************************************************/ int init_user_table() { if(USER_ID_SIZE*USER_AMOUNT_MAXMESSAGE_SIZE) { 《網(wǎng)絡(luò)編程》課程設(shè)計(jì) 5 printf(USER_ID_SIZE*USER_AMOUNT_MAXMESSAGE_SIZE\n)。iUSER_AMOUNT_MAX。 } } /************************************************************ *函數(shù)名稱 : login *正常返回值 : 登錄成功為 SUCCEED,登錄失敗為 FAIL *參數(shù)說(shuō)明 : client_socket 是服務(wù)器同用戶正在進(jìn)行通信的 socket *依賴自定義數(shù)據(jù)結(jié)構(gòu) : struct user 本文件 *依賴全局變量 : user_table 本文件 * user_table_mutex 本文件 *************************************************************/ int login(char * user_ID, char * password, int client_socket) { pthread_mutex_lock(amp。iUSER_AMOUNT_MAX。 pthread_mutex_unlock(amp。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。iUSER_AMOUNT_MAX。user_table_mutex)。 int i=0。user_table_mutex)。i++) { if(NOT_IN_USE == user_table[i].client_socket) { user_table[i].client_socket = NOT_LOGIN。user_table_mutex)。 return FAIL。 int i=0。 pthread_mutex_unlock(amp。user_table_mutex)。 int i=0。 pthread_mutex_unlock(amp。user_table_mutex)。 int i=0。user_table_mutex)。i++) { if(client_socket == user_table[i].client_socket) { memcpy(user_table[i].user_ID,user_ID,USER_ID_SIZE)。 《網(wǎng)絡(luò)編程》課程設(shè)計(jì) 10 return SUCCEED。 } /************************************************************ *函數(shù)名稱 : init_server_socket *功能說(shuō)明 : 初始化服務(wù)器用于監(jiān)聽(tīng)的的 socket *正常返回值 : 已經(jīng)初始化的服務(wù)器用于監(jiān)聽(tīng)的的 socket *函數(shù)執(zhí)行失敗 : 輸出錯(cuò)誤信息 ,退出程序 *************************************************************/ int init_server_socket() { struct sockaddr_in server_addr。 = htons(INADDR_ANY)。 exit(1)。 } if ( listen(server_socket, LENGTH_OF_LISTEN_QUEUE) ) { printf(Server Listen Failed!)。 bzero((char*)amp。 char * receiver = ((chat_package *)receive_buffer)to。 case LOGIN: = login(user_ID, password, client_socket)。 break。 《網(wǎng)絡(luò)編程》課程設(shè)計(jì) 12 client_socket = look_up_socket(receiver)。 break。 case CHANGE: = user_change_register(user_ID, password, client_socket)。 return 。 bzero((char*)amp。 if (length 0) 《網(wǎng)絡(luò)編程》課程設(shè)計(jì) 13 { printf(Server Recieve Data Failed!\n)。 pthread_exit(NULL)。 pthread_exit(NULL)。 int server_socket = init_server_socket()。child_thread_attr)。 socklen_t length = sizeof(client_addr)。 if ( new_server_socket 0) { printf(Server Accept Failed!\n)。child_thread_attr,talk_to_client, (void *)new_server_socket) 0 ) printf(pthread_create Failed : %s\n,strerror(errno))。 pthread_mutex_destroy(amp。 } 客戶端 /************************************************************ * 基于 socket 的聊天客戶機(jī) *設(shè)計(jì)思路 : * 客戶機(jī)提出各種請(qǐng)求 ,服務(wù)器根據(jù)不同請(qǐng)求 ,發(fā)送不同的響應(yīng) . *關(guān)鍵問(wèn)題 : * 客戶機(jī)和 服務(wù)器之間協(xié)議制訂 *************************************************************/ include include // for fork include sys/ // for signal include sys/ // for wait include static char user_ID[BUFFER_SIZE]。 bzero(amp。 //INADDR_ANY 表示自動(dòng)獲取本機(jī)地址 = htons(0)。 } //把客戶機(jī)的 socket 和客戶機(jī)的 socket 地址結(jié)構(gòu)聯(lián)系起來(lái) if( bind(client_socket,(struct sockaddr*)amp。 bzero(amp。) == 0) //服務(wù)器的 IP 地址來(lái)自程序的參數(shù) { printf(Server IP Address Error!\n)。 //向服務(wù)器發(fā)起連接 ,連接成功后 client_socket 代表了客戶機(jī)和服務(wù)器的一個(gè) socket 連接 if(connect(client_socket,(struct sockaddr*)amp。 } /************************************************************ *函數(shù)名稱 : send_request_to_server *正常返回值 : 發(fā)送到服務(wù)器的報(bào)文的字節(jié)數(shù) *函數(shù)執(zhí)行失敗 : 發(fā)送失敗返回值為 1 *參數(shù)說(shuō)明 : 當(dāng)不使用 option 時(shí) , option 應(yīng)當(dāng)是 NULL * 當(dāng)不 使用 message 時(shí) , message 應(yīng)當(dāng)是 NULL *依賴自定義數(shù)據(jù)結(jié)構(gòu) : chat_package *************************************************************/ void send_request_to_server(signed char request, char * option, char * to, char * message) { static chat_package buffer。 memcpy(, user_ID, ID_SIZE)。 if(message) memcpy(, message, MESSAGE_SIZE)。 exit(0)。 int length = recv(client_socket,(char*)amp。 if(from) mem
點(diǎn)擊復(fù)制文檔內(nèi)容
畢業(yè)設(shè)計(jì)相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖片鄂ICP備17016276號(hào)-1