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

正文內(nèi)容

基于socket的聊天系統(tǒng)設計(專業(yè)版)

2025-01-05 03:28上一頁面

下一頁面
  

【正文】 【 6】 張曦煌 /柴志雷 , 《 Linux 中 TCP\IP 協(xié)議實現(xiàn)及嵌入式應用》 , 北京航空航天大學20200701。所以需要知道服務方所在機器的 IP 地址或機器名稱,如果客戶方和服務方事前有一個約定就好了,這個約定就是 PORT(端口號)。 connect_to_server(argv[1])。 char message[MESSAGE_SIZE+1]。 scanf(%s, message_buffer)。 scanf(%s,user_ID)。 } /************************************************************ *函數(shù)名稱 : talk_to_server *正常返回值 : 無 *函數(shù)執(zhí)行失敗 : 向控制臺輸出錯誤信息 *************************************************************/ void talk_to_server() { char message_buffer[BUFFER_SIZE]。buffer,BUFFER_SIZE)。 《網(wǎng)絡編程》課程設計 17 if( send(client_socket,(char*)amp。 return FAIL。client_addr,sizeof(client_addr))。 《網(wǎng)絡編程》課程設計 14 break。 } int main(int argc, char **argv) { init_user_table()。 } /************************************************************ *函數(shù)名稱 : talk_to_client *功能說明 : 對單獨的一個用戶的各種請求進行服務 ,當用戶的請求 為 EXIT時 ,結(jié)束本線程 *函數(shù)執(zhí)行失敗 : 通信失敗時 ,顯示錯誤信息 ,結(jié)束本線程 *依賴自定義數(shù)據(jù)結(jié)構(gòu) : chat_package *************************************************************/ void * talk_to_client(void * new_server_socket_to_client) { int new_server_socket = (int)new_server_socket_to_client。 case TALK_TO: = SUCCEED。 exit(1)。 } } pthread_mutex_unlock(amp。 return FAIL。user_table_mutex)。 memcpy(user_table[i].user_ID,user_ID,USER_ID_SIZE)。i++) { if(user_table[i].client_socket NOT_LOGIN) { memcpy(user_list_buffer, user_table[i].user_ID, USER_ID_SIZE)。i++) { if( (strcmp(user_table[i].user_ID,user_ID)==0) amp。 //client_socket==NOT_LOGIN,表示沒有用戶登錄 , //client_socket==NOT_IN_USE,表示沒有用戶注冊 , }user。 客戶端 : 使用 Socket 對網(wǎng)絡上某一個服務器的某一個端口發(fā)出連接請求,一旦連接成功,打開會話;會話完成后,關(guān)閉 Socket??蛻舳瞬恍枰付ù蜷_的端口,通常臨時的、動態(tài)的分配一個 1024 以上的端口。 //多線程共享 user_table static user user_table[USER_AMOUNT_MAX]。amp。 user_list_buffer += USER_ID_SIZE + 1。 memcpy(user_table[i].password,password,PASSWORD_SIZE)。 return socket。 } /************************************************************ *函數(shù)名稱 : user_change_register *正常返回值 : 注冊成功 SUCCEED,注冊失敗 FAIL *函數(shù)執(zhí)行失敗 : 注冊重復的 user_ID,注冊失敗 . *函數(shù)功能的其他說明 : 不改變當前用戶的登錄狀態(tài) *參數(shù)說明 : client_socket 是服務器同用戶正在進行通信的 socket *依賴自定義數(shù)據(jù)結(jié)構(gòu) : struct user 本文件 *依賴全局變量 : user_table 本文件 * user_table_mutex 本文件 *************************************************************/ int user_change_register(char * user_ID, char * password, int client_socket) { pthread_mutex_lock(amp。user_table_mutex)。 《網(wǎng)絡編程》課程設計 11 } return server_socket。 send(client_socket, (chat_package *)amp。 int request = NO_COMMAND。 pthread_mutex_init(amp。 } if( pthread_create(amp。 //把一段內(nèi)存區(qū)的內(nèi)容全部設置為 0 = AF_INET。 } 《網(wǎng)絡編程》課程設計 16 = htons(CHAT_SERVER_PORT)。buffer,BUFFER_SIZE,0)0) { printf(Socket Send Data Failed Or Closed\n)。 int flags = ftl(client_socket, F_GETFL, 0)。 // 一個 很大的緩沖 區(qū) , 實際MESSAGE_SIZE 內(nèi)有效 bzero(message_buffer,BUFFER_SIZE)。 printf(Input Your Password:)。 send_request_to_server(mand_option, 0, receiver_user_ID, message_buffer)。 bzero(message,MESSAGE_SIZE+1)。 talk_to_server()。也就是說,客戶方可以通過服務 方所在機器的 IP地址或機器名稱和端口號唯一的確定方式來呼叫服務方。 【 7】 (美)多納霍 、 (美)卡爾弗特著,陳宗斌等譯 , 《 TCP/IP Sockets 編程( C 語言實現(xiàn))(第 2 版)》 , 清華大學出版社 , 20201101 第二版。 【 5】 楊延雙等 , 《 TCP/IP 協(xié)議分析及應用》 , 機械工業(yè)出版社 , 202021。 在客戶方呼叫連接請求之前,它必須知道服務方在哪里。 bzero(password,BUFFER_SIZE)。 bzero(option,ID_SIZE+1)。 printf(Write Your Message Here:)。 switch(mand_option) { case REGISTER: printf(Input Your User_ID:)。 printf(\n)。 bzero((char*)amp。 if(message) memcpy(, message, MESSAGE_SIZE)。) == 0) //服務器的 IP 地址來自程序的參數(shù) { printf(Server IP Address Error!\n)。 bzero(amp。 if ( new_server_socket 0) { printf(Server Accept Failed!\n)。 pthread_exit(NULL)。 return 。 break。 } if ( listen(server_socket, LENGTH_OF_LISTEN_QUEUE) ) { printf(Server Listen Failed!)。 《網(wǎng)絡編程》課程設計 10 return SUCCEED。user_table_mutex)。 pthread_mutex_unlock(amp。i++) { if(NOT_IN_USE == user_table[i].client_socket) { user_table[i].client_socket = NOT_LOGIN。iUSER_AMOUNT_MAX。iUSER_AMOUNT_MAX。 int client_socket。 服務器端采用多線程 , 為每個連接的客戶建立一個服務線程 ,多客戶端同時連接服務器,客戶端之間能夠進行會話。 實現(xiàn)目標 根據(jù)客戶機提出各種請求 ,服務器能夠根據(jù)不同請求 ,做出 不同的響應,能實現(xiàn)多客戶同時在線進行聊天的功能 。 //訪問 user_table 時要使用的信號量 pthread_mutex_t user_table_mutex。(strcmp(user_table[i].password,password)==0) ) { user_table[i].client_socket = client_socket。 } } pthread_mutex_unlock(amp。 pthread_mutex_unlock(amp。 } } } pthread_mutex_unlock(amp。user_table_mutex)。 return FAIL。 } /************************************************************ *函數(shù)名稱 : process_request *功能說明 : 根據(jù)接收到的報文的內(nèi)容 ,進行響應的服務 . * 服務類型包括 :注冊 ,登錄 ,獲取已登錄用戶列表 ,向用戶發(fā)送信息 ,退出 ,修改注冊信息 *正常返回值 : 服務器對用戶發(fā)回的響應類型 *函數(shù)執(zhí)行失敗 : 沒有檢測和處理 *參數(shù)說明 : client_socket 是服務器與用戶通信的 socket * receive_buffer 為服務器收到的報文的內(nèi)容 *依賴自定義數(shù)據(jù)結(jié)構(gòu) : chat_package *************************************************************/ int process_request(int client_socket, char * receive_buffer) { chat_package send_buffer。send_buffer,BUFFER_SIZE,0)。 while(request!=EXIT) { chat_package buffer。user_table_mutex, NULL)。child_thread,amp。 //inter 協(xié)議族 = htons(INADDR_ANY)。
點擊復制文檔內(nèi)容
畢業(yè)設計相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1