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

正文內(nèi)容

基于socket的聊天系統(tǒng)設(shè)計-文庫吧在線文庫

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

下一頁面
  

【正文】 量 : user_table 本文件 * user_table_mutex 本文件 *************************************************************/ int login(char * user_ID, char * password, int client_socket) { pthread_mutex_lock(amp。 /************************************************************ *函數(shù)名稱 : init_user_table *函數(shù)執(zhí)行失敗 : 當(dāng)一個報文不能容納全部用戶名稱列表時 ,給出錯誤提示信息 ,結(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è)計 5 printf(USER_ID_SIZE*USER_AMOUNT_MAXMESSAGE_SIZE\n)。 define BUFFER_SIZE (sizeof(chat_package)) /************************************************************ *選項分類 : * 用戶列表 *************************************************************/ define USER_LIST USER_LIST 服務(wù)器端 /*************************************************************** 一個基于 socket 的 Linux上的網(wǎng)絡(luò)聊天程序 多線程的服務(wù)器程序 編譯方式 : gcc pthread o chat_server * 基于 socket 的聊天服務(wù)器端 *設(shè)計思路 : * 客戶機提出各種請求 ,服務(wù)器根據(jù)不同請求 ,發(fā)送不同的響應(yīng) 。 程序具有簡單易用性。 關(guān)鍵詞: socket、 server、 client、聊天系統(tǒng) 引言 socket 通常也稱 作 套接字 ,用于描述 IP 地址和端口,是一個通信鏈的句柄。 開發(fā)原理 服務(wù)器 : 使用 ServerSocket 監(jiān)聽指定的端口,端口可以隨意指定(由于 1024 以下的端口通常屬于保留端口,在一些操作系統(tǒng)中不可以隨意使用,所以使用大于 1024 的端口),等待客戶連接請求,客戶連接后,會話產(chǎn)生; 在完成會話后,關(guān)閉連接。 char password[PASSWORD_SIZE +1]。 char password[PASSWORD_SIZE]。 for(i=0。 for(i=0。 } } pthread_mutex_unlock(amp。 for(i=0。user_table_mutex)。iUSER_AMOUNT_MAX。user_table_mutex)。i++) { if(strcmp(user_table[i].user_ID,receiver)==0) { if(user_table[i].client_socket=0) { socket = user_table[i].client_socket。user_table_mutex)。 } } pthread_mutex_unlock(amp。i++) { if(strcmp(user_table[i].user_ID,user_ID)==0) { pthread_mutex_unlock(amp。user_table_mutex)。 = AF_INET。 exit(1)。 char * password = ((chat_package *)receive_buffer)password。 = get_active_user_list()。 memcpy(, ((chat_package *)receive_buffer)message, MESSAGE_SIZE)。send_buffer,BUFFER_SIZE,0)。buffer,BUFFER_SIZE,0)。 } close(new_server_socket)。 pthread_attr_init(amp。length)。child_thread_attr)。 /************************************************************ *函數(shù)名稱 : connect_to_server *正常返回值 : 連接到服務(wù)器的 socket *函數(shù)執(zhí)行失敗 : 連接失敗返回值 為 1,向控制臺輸出錯誤信息 *依賴自定義數(shù)據(jù)結(jié)構(gòu) : 無 《網(wǎng)絡(luò)編程》課程設(shè)計 15 *************************************************************/ int connect_to_server(char * server_IP_addr) { //設(shè)置一個 socket 地址結(jié)構(gòu) client_addr,代表客戶機 inter 地址 , 端口 struct sockaddr_in client_addr。 return FAIL。 if(i_aton(server_IP_addr,amp。 } return SUCCEED。 if(to) memcpy(, to, ID_SIZE)。buffer,BUFFER_SIZE)。 } 《網(wǎng)絡(luò)編程》課程設(shè)計 18 /************************************************************ *函數(shù)名稱 : receive_result_from_server_noblock *正常返回值 : 服務(wù)器發(fā)回的響應(yīng)類型 * option 被存放入響應(yīng)的選項 * message 被存放入響應(yīng)的信息 *函數(shù)執(zhí)行失敗 : 接收數(shù)據(jù)失敗返回值為 1 *參數(shù)要求 : option 被預(yù)先分配 OPTION_SIZE+1 大小的空間 * message 被預(yù)先分配 MESSAGE_SIZE+1 大小的空間 *參數(shù)說明 : 當(dāng)不使用 option 時 , option 應(yīng)當(dāng)是 NULL * 當(dāng)不使用 message 時 , message 應(yīng)當(dāng)是 NULL *依賴自定義數(shù)據(jù)結(jié)構(gòu) : chat_package *************************************************************/ int receive_result_from_server_noblock(char * option, char * from, char * message) { chat_package buffer。 if(option) memcpy(option, , OPTION_SIZE)。 user_id+=ID_SIZE+1 ) printf(%s\t, user_id)。 printf(%d:REGISTER\n,REGISTER)。mand_option)。 scanf(%s,user_ID)。 scanf(%s,receiver_user_ID)。 case CHANGE: printf(Input Your New User_ID:)。 char message_from[ID_SIZE+1]。 break。 } bzero(user_ID,BUFFER_SIZE)。因此,程序的設(shè)計以及功能是正確并完整的。客戶方和服務(wù)方是相對的,同一個應(yīng)用可以是客戶方,也可以是服務(wù)方。當(dāng)客戶方的消息到達(dá)服務(wù)方端口時,會自動觸發(fā)一個事件( event),服務(wù)方只要接管該事件,就可以接受來自客戶方的消息了。 【 4】 (美) Stevens.《 UNIX 網(wǎng)絡(luò)編程(第一卷)》 , 楊繼張譯 , 清華大學(xué)出版社 , 2020。 【 12】 謝希仁 , 《計算機網(wǎng)絡(luò)》 , 電子工業(yè)出版社 , 202011。 【 8】 (美)科默( Comer, .) , 《用 TCP/IP 進(jìn)行網(wǎng)際互連第一卷 —— 原理、協(xié)議與結(jié)構(gòu)(英文版)》 , 電子工業(yè)出版社 , 202081。 胡博深:程序的編譯,測試糾錯 ,文檔整理 。在客戶方呼叫之前,服務(wù)方必須處于偵聽狀態(tài),偵聽是否有客戶要求建立連接。最早出現(xiàn)在 UNIX 系統(tǒng)中,是 UNIX 系統(tǒng)主要的信息傳遞方式。 } 《網(wǎng)絡(luò)編程》課程設(shè)計 22 程序測試 圖 11 編譯服務(wù)端并運行 圖 11 服務(wù)端編譯運行 圖 12 編譯客戶端并運行 圖 12 客戶端編譯運行 程序界面功能包括: 注冊; 登陸; 獲取在線用戶名單; 聊天; 退出; 獲取他人對你的聊天信息 。 case TRANSFER: printf(\nMessage From %s :%s\n,message_from, message)。 《網(wǎng)絡(luò)編程》課程設(shè)計 21 int response。 send_request_to_server(mand_option, 0, 0, 0)。 break。 break。 scanf(%s,password)。 printf(%d:EXIT\n,EXIT)。 char receiver_user_ID[BUFFER_SIZE]。 } /************************************************************ *函數(shù)名稱 : sprint_user_list *參數(shù)說明 : 參數(shù)中存放 user_list * 每 ID_SIZE+1 放置一個 user_ID *************************************************************/ void print_user_list(char * user_list_buffer) { printf(\nUser_Online:\n)。 ftl(client_socket, F_SETFL, flags|O_NONBLOCK)。 } if(option) memcpy(option, , OPTION_SIZE)。 close(client_socket)。 = request。 socklen_t server_addr_length = sizeof(server_addr)。 } //設(shè)置一個 socket地址結(jié)構(gòu) server_addr,代表服務(wù)器的 inter地址 , 端口 struct sockaddr_in server_addr。 //inter 協(xié)議族 = htons(INADDR_ANY)。 return 0。child_thread,amp。 while (1) { struct sockaddr_in client_addr。user_table_mutex, NULL)。 } if (length==0)
點擊復(fù)制文檔內(nèi)容
畢業(yè)設(shè)計相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1