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

正文內(nèi)容

基于socket的聊天系統(tǒng)設(shè)計-預(yù)覽頁

2025-12-11 03:28 上一頁面

下一頁面
 

【正文】 }user。 exit(1)。i++) { user_table[i].client_socket = NOT_IN_USE。user_table_mutex)。i++) { if( (strcmp(user_table[i].user_ID,user_ID)==0) amp。user_table_mutex)。 return FAIL。user_table_mutex)。i++) { if(user_table[i].client_socket NOT_LOGIN) { memcpy(user_list_buffer, user_table[i].user_ID, USER_ID_SIZE)。 return SUCCEED。 for(i=0。 return FAIL。 memcpy(user_table[i].user_ID,user_ID,USER_ID_SIZE)。 return SUCCEED。 } /************************************************************ *函數(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è)計 8 pthread_mutex_lock(amp。 for(i=0。user_table_mutex)。 return FAIL。 for(i=0。user_table_mutex)。 return FAIL。 for(i=0。 return FAIL。 memcpy(user_table[i].password,password,PASSWORD_SIZE)。 } } pthread_mutex_unlock(amp。 bzero(amp。 = htons(CHAT_SERVER_PORT)。 } if( bind(server_socket,(struct sockaddr*)amp。 exit(1)。send_buffer,BUFFER_SIZE)。 printf(Request %d from client\n,((chat_package *)receive_buffer)type)。 break。 case TALK_TO: = SUCCEED。 = TRANSFER。 case EXIT: deactive_user(client_socket)。 } printf(Answer %d to client\n,)。 } /************************************************************ *函數(shù)名稱 : talk_to_client *功能說明 : 對單獨的一個用戶的各種請求進行服務(wù) ,當用戶的請求 為 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。buffer,BUFFER_SIZE)。 close(new_server_socket)。 } request = process_request(new_server_socket, (char*)amp。 } int main(int argc, char **argv) { init_user_table()。 pthread_t child_thread。 pthread_attr_setdetachstate(amp。 int new_server_socket = accept(server_socket,(struct sockaddr*)amp。 《網(wǎng)絡(luò)編程》課程設(shè)計 14 break。 } close(server_socket)。user_table_mutex)。 //一個很大的緩沖區(qū) ,實際 ID_SIZE內(nèi)有效 static char password[BUFFER_SIZE]。client_addr,sizeof(client_addr))。 //0 表示讓系統(tǒng)自動分配一個空閑端口 //創(chuàng)建用于 inter 的流協(xié)議 (TCP)socket,用 client_socket 代表客戶機socket client_socket = socket(AF_INET,SOCK_STREAM,0)。client_addr,sizeof(client_addr))) { printf(Client Bind Port Failed!\n)。server_addr,sizeof(server_addr))。 return FAIL。server_addr, server_addr_length) 0) { printf(Can Not Connect To %s!\n,server_IP_addr)。 bzero((char*)amp。 memcpy(, password, PASSWORD_SIZE)。 《網(wǎng)絡(luò)編程》課程設(shè)計 17 if( send(client_socket,(char*)amp。 } } /************************************************************ *函數(shù)名稱 : receive_result_from_server *正常返回值 : 服務(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ù)說明 : 當不使用 option 時 , option 應(yīng)當是 NULL * 當不使用 message 時 , message 應(yīng)當是 NULL *依賴自定義數(shù)據(jù)結(jié)構(gòu) : chat_package *************************************************************/ int receive_result_from_server(char * option, char * from, char * message) { chat_package buffer。buffer,BUFFER_SIZE,0)。 if(message) memcpy(message, , MESSAGE_SIZE)。buffer,BUFFER_SIZE)。buffer,BUFFER_SIZE,0)。 if(message) memcpy(message, , MESSAGE_SIZE)。 for( 。 } /************************************************************ *函數(shù)名稱 : talk_to_server *正常返回值 : 無 *函數(shù)執(zhí)行失敗 : 向控制臺輸出錯誤信息 *************************************************************/ void talk_to_server() { char message_buffer[BUFFER_SIZE]。 int mand_option = NO_COMMAND。 printf(%d:GET_USER_LIST\n,GET_USER_LIST)。 printf(Input Your Command Option Num: )。 scanf(%s,user_ID)。 《網(wǎng)絡(luò)編程》課程設(shè)計 20 break。 scanf(%s,password)。 break。 scanf(%s, message_buffer)。 close(client_socket)。 printf(Input Your New Password:)。 } //recieve_from_server char option[OPTION_SIZE+1]。 char message[MESSAGE_SIZE+1]。 else response=receive_result_from_server(option, message_from, message)。 else printf(\nRecieved From Server: OK\n)。 } } } int main(int argc, char **argv) { if (argc != 2) { printf(Usage: ./%s ServerIPAddress\n,argv[0])。 connect_to_server(argv[1])。 圖 14 注冊一個用戶 bosn,密碼 111 《網(wǎng)絡(luò)編程》課程設(shè)計 23 圖 14 注冊用戶 bosn 圖 15 用戶 bosn 登陸 圖 15 bosn 登陸 為了實現(xiàn)聊天功能,需要兩個用戶,因此再注冊一個用戶?,F(xiàn)在已經(jīng)能夠較好的掌握使用 socket 編程建立客戶端與服務(wù)端,并且進行通信的方法和技能。 Socket 包含兩個基本的概念 —— server(服務(wù)方)和 client(客戶方)。所以需要知道服務(wù)方所在機器的 IP 地址或機器名稱,如果客戶方和服務(wù)方事前有一個約定就好了,這個約定就是 PORT(端口號)。連接方式有兩種,同步方式( Blocking)和不同步方式 (noBlocking)。通過合作,加強了我們的團隊合作意識,分享了彼此的長處和經(jīng)驗,加深了友情,也為不久的將來我們進入社會參加工作打下了基礎(chǔ),通過本次課程設(shè)計,我們受益良多。 參考文獻 【 1】 Linux 開源社區(qū): 【 2】 甘剛 , 《 Linux/Unix 網(wǎng)絡(luò)編程》 , 中國水利水電出版社 , 2020 年 7 月第一版。 【 6】 張曦煌 /柴志雷 , 《 Linux 中 TCP\IP 協(xié)議實現(xiàn)及嵌入式應(yīng)用》 , 北京航空航天大學20200701。 【 10】 陳明 , 《 Ubuntu Linux 應(yīng)用技術(shù)教程》 , 清華大學出版社 , 20204
點擊復(fù)制文檔內(nèi)容
畢業(yè)設(shè)計相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1