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

正文內(nèi)容

基于socket的聊天系統(tǒng)設(shè)計(jì)(更新版)

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

下一頁面
  

【正文】 } for(i=0。 } /************************************************************ *函數(shù)名稱 : user_change_register *正常返回值 : 注冊(cè)成功 SUCCEED,注冊(cè)失敗 FAIL *函數(shù)執(zhí)行失敗 : 注冊(cè)重復(fù)的 user_ID,注冊(cè)失敗 . *函數(shù)功能的其他說明 : 不改變當(dāng)前用戶的登錄狀態(tài) *參數(shù)說明 : client_socket 是服務(wù)器同用戶正在進(jìn)行通信的 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。iUSER_AMOUNT_MAX。 return socket。user_table_mutex)。 memcpy(user_table[i].password,password,PASSWORD_SIZE)。iUSER_AMOUNT_MAX。 user_list_buffer += USER_ID_SIZE + 1。 } 《網(wǎng)絡(luò)編程》課程設(shè)計(jì) 6 /************************************************************ *函數(shù)名稱 : get_active_user_list *正常返回值 : SUCCEED *參數(shù)說明 : 在函數(shù)返回?cái)?shù)據(jù)放置在字符數(shù)組 user_list_buffer 中 , * 在 user_list_buffer中 ,每個(gè)用戶名稱占據(jù) USER_ID_SIZE + 1大小 . * 要求 user_list_buffer 中的數(shù)據(jù)必須初始化為全 39。amp。 bzero(user_table[i].user_ID,OPTION_SIZE)。 //多線程共享 user_table static user user_table[USER_AMOUNT_MAX]。 char message[MESSAGE_SIZE +1]??蛻舳瞬恍枰付ù蜷_的端口,通常臨時(shí)的、動(dòng)態(tài)的分配一個(gè) 1024 以上的端口。目 錄 引言 ........................................................................................................ 1 開發(fā)原理 ........................................................................................... 1 實(shí)現(xiàn)目標(biāo) ........................................................................................... 1 設(shè)計(jì)實(shí)現(xiàn) ........................................................................................... 2 頭文件 .......................................................................................... 2 服務(wù)器端 ....................................................................................... 3 客戶端 ........................................................................................ 14 程序測(cè)試 ......................................................................................... 22 設(shè)計(jì)總結(jié) ......................................................................................... 24 成員分工 ......................................................................................... 25 參考文獻(xiàn) ......................................................................................... 25 《網(wǎng)絡(luò)編程》課程設(shè)計(jì) 1 《網(wǎng)絡(luò)程序設(shè)計(jì)》課程設(shè)計(jì) 基于 socket 的聊天系統(tǒng)設(shè)計(jì) 摘要: 本設(shè)計(jì)通過研究討論,設(shè)計(jì)基于 socket 編程的網(wǎng)絡(luò)聊天系統(tǒng) ,服務(wù)器端采用多線程并發(fā)服務(wù)方式 ,多客戶端能同時(shí)連接服務(wù)器,并且客戶端之間能進(jìn)行通信 。 客戶端 : 使用 Socket 對(duì)網(wǎng)絡(luò)上某一個(gè)服務(wù)器的某一個(gè)端口發(fā)出連接請(qǐng)求,一旦連接成功,打開會(huì)話;會(huì)話完成后,關(guān)閉 Socket。 char to[ID_SIZE + 1]。 //client_socket==NOT_LOGIN,表示沒有用戶登錄 , //client_socket==NOT_IN_USE,表示沒有用戶注冊(cè) , }user。i++) { user_table[i].client_socket = NOT_IN_USE。i++) { if( (strcmp(user_table[i].user_ID,user_ID)==0) amp。 return FAIL。i++) { if(user_table[i].client_socket NOT_LOGIN) { memcpy(user_list_buffer, user_table[i].user_ID, USER_ID_SIZE)。 for(i=0。 memcpy(user_table[i].user_ID,user_ID,USER_ID_SIZE)。 } /************************************************************ *函數(shù)名稱 : look_up_socket *正常返回值 : 服務(wù)器與目的用戶通信的 socket, *函數(shù)執(zhí)行失敗 : 沒有找到服務(wù)器與目的用戶通信的 socket,返回值為 FAIL *參數(shù)說明 : receiver 是目的用戶的 ID *依賴自定義數(shù)據(jù)結(jié)構(gòu) : struct user 本文件 *依賴全局變量 : user_table 本文件 * user_table_mutex 本文件 *************************************************************/ int look_up_socket(char * receiver) { 《網(wǎng)絡(luò)編程》課程設(shè)計(jì) 8 pthread_mutex_lock(amp。user_table_mutex)。 for(i=0。 return FAIL。 return FAIL。 } } pthread_mutex_unlock(amp。 = htons(CHAT_SERVER_PORT)。 exit(1)。 printf(Request %d from client\n,((chat_package *)receive_buffer)type)。 case TALK_TO: = SUCCEED。 case EXIT: deactive_user(client_socket)。 } /************************************************************ *函數(shù)名稱 : talk_to_client *功能說明 : 對(duì)單獨(dú)的一個(gè)用戶的各種請(qǐng)求進(jìn)行服務(wù) ,當(dāng)用戶的請(qǐng)求 為 EXIT時(shí) ,結(jié)束本線程 *函數(shù)執(zhí)行失敗 : 通信失敗時(shí) ,顯示錯(cuò)誤信息 ,結(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。 close(new_server_socket)。 } int main(int argc, char **argv) { init_user_table()。 pthread_attr_setdetachstate(amp。 《網(wǎng)絡(luò)編程》課程設(shè)計(jì) 14 break。user_table_mutex)。client_addr,sizeof(client_addr))。client_addr,sizeof(client_addr))) { printf(Client Bind Port Failed!\n)。 return FAIL。 bzero((char*)amp。 《網(wǎng)絡(luò)編程》課程設(shè)計(jì) 17 if( send(client_socket,(char*)amp。buffer,BUFFER_SIZE,0)。buffer,BUFFER_SIZE)。 if(message) memcpy(message, , MESSAGE_SIZE)。 } /************************************************************ *函數(shù)名稱 : talk_to_server *正常返回值 : 無 *函數(shù)執(zhí)行失敗 : 向控制臺(tái)輸出錯(cuò)誤信息 *************************************************************/ void talk_to_server() { char message_buffer[BUFFER_SIZE]。 printf(%d:GET_USER_LIST\n,GET_USER_LIST)。 scanf(%s,user_ID)。 scanf(%s,password)。 scanf(%s, message_buffer)。 printf(Input Your New Password:)。 char message[MESSAGE_SIZE+1]。 else printf(\nRecieved From Server: OK\n)。 connect_to_server(argv[1])?,F(xiàn)在已經(jīng)能夠較好的掌握使用 socket 編程建立客戶端與服務(wù)端,并且進(jìn)行通信的方法和技能。所以需要知道服務(wù)方所在機(jī)器的 IP 地址或機(jī)器名稱,如果客戶方和服務(wù)方事前有一個(gè)約定就好了,這個(gè)約定就是 PORT(端口號(hào))。通過合作,加強(qiáng)了我們的團(tuán)隊(duì)合作意識(shí),分享了彼此的長處和經(jīng)驗(yàn),加深了友情,也為不久的將來我們進(jìn)入社會(huì)參加工作打下了基礎(chǔ),通過本次課程設(shè)計(jì),我們受益良多。 【 6】 張曦煌 /柴志雷 , 《 Linux 中 TCP\IP 協(xié)議實(shí)現(xiàn)及嵌入式應(yīng)用》 , 北京航空航天大學(xué)202007
點(diǎn)擊復(fù)制文檔內(nèi)容
畢業(yè)設(shè)計(jì)相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1