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

正文內(nèi)容

基于socket的聊天系統(tǒng)設(shè)計(jì)-免費(fèi)閱讀

  

【正文】 【 10】 陳明 , 《 Ubuntu Linux 應(yīng)用技術(shù)教程》 , 清華大學(xué)出版社 , 202041。 參考文獻(xiàn) 【 1】 Linux 開(kāi)源社區(qū): 【 2】 甘剛 , 《 Linux/Unix 網(wǎng)絡(luò)編程》 , 中國(guó)水利水電出版社 , 2020 年 7 月第一版。連接方式有兩種,同步方式( Blocking)和不同步方式 (noBlocking)。 Socket 包含兩個(gè)基本的概念 —— server(服務(wù)方)和 client(客戶方)。 圖 14 注冊(cè)一個(gè)用戶 bosn,密碼 111 《網(wǎng)絡(luò)編程》課程設(shè)計(jì) 23 圖 14 注冊(cè)用戶 bosn 圖 15 用戶 bosn 登陸 圖 15 bosn 登陸 為了實(shí)現(xiàn)聊天功能,需要兩個(gè)用戶,因此再注冊(cè)一個(gè)用戶。 } } } int main(int argc, char **argv) { if (argc != 2) { printf(Usage: ./%s ServerIPAddress\n,argv[0])。 else response=receive_result_from_server(option, message_from, message)。 } //recieve_from_server char option[OPTION_SIZE+1]。 close(client_socket)。 break。 《網(wǎng)絡(luò)編程》課程設(shè)計(jì) 20 break。 printf(Input Your Command Option Num: )。 int mand_option = NO_COMMAND。 for( 。buffer,BUFFER_SIZE,0)。 if(message) memcpy(message, , MESSAGE_SIZE)。 } } /************************************************************ *函數(shù)名稱 : receive_result_from_server *正常返回值 : 服務(wù)器發(fā)回的響應(yīng)類型 * option 被存放入響應(yīng)的選項(xiàng) * message 被存放入響應(yīng)的信息 *函數(shù)執(zhí)行失敗 : 接收數(shù)據(jù)失敗返回值為 1 *參數(shù)要求 : option 被預(yù)先分配 OPTION_SIZE+1 大小的空間 * message 被預(yù)先分配 MESSAGE_SIZE+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 *************************************************************/ int receive_result_from_server(char * option, char * from, char * message) { chat_package buffer。 memcpy(, password, PASSWORD_SIZE)。server_addr, server_addr_length) 0) { printf(Can Not Connect To %s!\n,server_IP_addr)。server_addr,sizeof(server_addr))。 //0 表示讓系統(tǒng)自動(dòng)分配一個(gè)空閑端口 //創(chuàng)建用于 inter 的流協(xié)議 (TCP)socket,用 client_socket 代表客戶機(jī)socket client_socket = socket(AF_INET,SOCK_STREAM,0)。 //一個(gè)很大的緩沖區(qū) ,實(shí)際 ID_SIZE內(nèi)有效 static char password[BUFFER_SIZE]。 } close(server_socket)。 int new_server_socket = accept(server_socket,(struct sockaddr*)amp。 pthread_t child_thread。 } request = process_request(new_server_socket, (char*)amp。buffer,BUFFER_SIZE)。 } printf(Answer %d to client\n,)。 = TRANSFER。 break。send_buffer,BUFFER_SIZE)。 } if( bind(server_socket,(struct sockaddr*)amp。 bzero(amp。 memcpy(user_table[i].password,password,PASSWORD_SIZE)。 for(i=0。user_table_mutex)。 return FAIL。 for(i=0。 return SUCCEED。 return FAIL。 return SUCCEED。user_table_mutex)。user_table_mutex)。user_table_mutex)。 exit(1)。 * 服務(wù)器端采用多線程 ,為每個(gè)連接的客戶建立一個(gè)服務(wù)線程 。 《網(wǎng)絡(luò)編程》課程設(shè)計(jì) 2 設(shè)計(jì)實(shí)現(xiàn) 頭文件 /************************************************************ * * 基于 socket 的聊天客戶機(jī)和服務(wù)器的頭文件 *設(shè)計(jì)思路 : * 客戶機(jī)提出各種請(qǐng)求 ,服務(wù)器根據(jù)不同請(qǐng)求 ,發(fā)送不同的響應(yīng) . *關(guān)鍵問(wèn)題 : * 客戶機(jī)和服務(wù)器之間協(xié)議制訂 *************************************************************/ include i/ // for sockaddr_in include sys/ // for socket include sys/ // for socket include // for printf include // for exit include // for bzero /************************************************************ *服務(wù)器端口定義 *************************************************************/ define CHAT_SERVER_PORT (6666) /************************************************************ *報(bào)文類型定義 *************************************************************/ define NO_COMMAND (100) //客戶端發(fā)送報(bào)文類型 define REGISTER (1) define LOGIN (2) define GET_USER_LIST (3) define TALK_TO (4) define EXIT (5) define CHANGE (6) define GET_MESSAGE (7) //服務(wù)器端發(fā)送報(bào)文類型 《網(wǎng)絡(luò)編程》課程設(shè)計(jì) 3 define SUCCEED (0) define FAIL (1) define TRANSFER (80) /************************************************************ *報(bào)文格式定義 *************************************************************/ define COMMAND_SIZE (sizeof(char)) define OPTION_SIZE (16) define ID_SIZE (OPTION_SIZE) define PASSWORD_SIZE (OPTION_SIZE) define MESSAGE_SIZE (1024) typedef struct chat_package { signed char type。應(yīng)用程序通常通過(guò) 套接字 向網(wǎng)絡(luò)發(fā)出請(qǐng)求或者應(yīng)答網(wǎng)絡(luò)請(qǐng)求。 一個(gè)聊天系統(tǒng)的通信模塊就是 Socket 程序的設(shè)計(jì)與實(shí)現(xiàn),聊天系統(tǒng)分為服務(wù)器端和客戶端,服務(wù)器端的任務(wù)就是接受客戶端的不同請(qǐng)求,做出不同的響應(yīng),并處理多客戶端之間的通信。 char from[ID_SIZE +1]。 《網(wǎng)絡(luò)編程》課程設(shè)計(jì) 4 *關(guān)鍵問(wèn)題 : * 客戶機(jī)和服務(wù)器之間協(xié)議制訂 * 多線程訪問(wèn)同一個(gè)用戶列表的互斥問(wèn)題 *************************************************************/ include include sys/ include define LENGTH_OF_LISTEN_QUEUE (20) define USER_AMOUNT_MAX (50) define NOT_LOGIN (1) define NOT_IN_USE (NOT_LOGIN 1) define USER_ID_SIZE (ID_SIZE) typedef struct user{ char user_ID[USER_ID_SIZE]。 } int i=0。 int i=0。 return SUCCEED。 int i=0。 } /************************************************************ *函數(shù)名稱 : user_register *正常返回值 : 注冊(cè)成功 SUCCEED,注冊(cè)失敗 FAIL *函數(shù)執(zhí)行失敗 : 注冊(cè)重復(fù)的 user_ID,注冊(cè)失敗 . * 如果 user_table 中沒(méi)有處于空閑的記錄 ,注冊(cè)失敗 . *參數(shù)說(shuō)明 : client_socket 是服務(wù)器同用戶正在進(jìn)行通信的 socket *依賴自定義數(shù)據(jù)結(jié)構(gòu) : struct user 本文件 *依賴全局變量 : user_table 本文件 * user_table_mutex 本文件 *************************************************************/ 《網(wǎng)絡(luò)編程》課程設(shè)計(jì) 7 int user_register(char * user_ID, char * password, int client_socket) { pthread_mutex_lock(amp。 } } for(i=0。 } } pthread_mutex_unlock(amp。iUSER_AMOUNT_MAX。 } /************************************************************ *函數(shù)名稱 : deactive_user *功能說(shuō)明 : 用于用戶登出服務(wù)器時(shí) ,把服務(wù)器與用戶通信的 socket 設(shè)置為NOT_LOGIN *正常返回值 : SUCCEED *函數(shù)執(zhí)行失敗 : 沒(méi)有找到服務(wù)器與用戶通信的
點(diǎn)擊復(fù)制文檔內(nèi)容
畢業(yè)設(shè)計(jì)相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1