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

正文內(nèi)容

基于socket的聊天系統(tǒng)設(shè)計(留存版)

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

下一頁面
  

【正文】 socklen_t server_addr_length = sizeof(server_addr)。 close(client_socket)。 ftl(client_socket, F_SETFL, flags|O_NONBLOCK)。 char receiver_user_ID[BUFFER_SIZE]。 scanf(%s,password)。 break。 《網(wǎng)絡(luò)編程》課程設(shè)計 21 int response。 } 《網(wǎng)絡(luò)編程》課程設(shè)計 22 程序測試 圖 11 編譯服務(wù)端并運行 圖 11 服務(wù)端編譯運行 圖 12 編譯客戶端并運行 圖 12 客戶端編譯運行 程序界面功能包括: 注冊; 登陸; 獲取在線用戶名單; 聊天; 退出; 獲取他人對你的聊天信息 。在客戶方呼叫之前,服務(wù)方必須處于偵聽狀態(tài),偵聽是否有客戶要求建立連接。 【 8】 (美)科默( Comer, .) , 《用 TCP/IP 進行網(wǎng)際互連第一卷 —— 原理、協(xié)議與結(jié)構(gòu)(英文版)》 , 電子工業(yè)出版社 , 202081。 【 4】 (美) Stevens.《 UNIX 網(wǎng)絡(luò)編程(第一卷)》 , 楊繼張譯 , 清華大學出版社 , 2020??蛻舴胶头?wù)方是相對的,同一個應(yīng)用可以是客戶方,也可以是服務(wù)方。 } bzero(user_ID,BUFFER_SIZE)。 char message_from[ID_SIZE+1]。 scanf(%s,receiver_user_ID)。mand_option)。 user_id+=ID_SIZE+1 ) printf(%s\t, user_id)。 } 《網(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ù)說明 : 當不使用 option 時 , option 應(yīng)當是 NULL * 當不使用 message 時 , message 應(yī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(to) memcpy(, to, ID_SIZE)。 if(i_aton(server_IP_addr,amp。 /************************************************************ *函數(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。length)。 } close(new_server_socket)。send_buffer,BUFFER_SIZE,0)。 = get_active_user_list()。 exit(1)。user_table_mutex)。 } } pthread_mutex_unlock(amp。i++) { if(strcmp(user_table[i].user_ID,receiver)==0) { if(user_table[i].client_socket=0) { socket = user_table[i].client_socket。iUSER_AMOUNT_MAX。 for(i=0。 for(i=0。 char password[PASSWORD_SIZE]。 開發(fā)原理 服務(wù)器 : 使用 ServerSocket 監(jiān)聽指定的端口,端口可以隨意指定(由于 1024 以下的端口通常屬于保留端口,在一些操作系統(tǒng)中不可以隨意使用,所以使用大于 1024 的端口),等待客戶連接請求,客戶連接后,會話產(chǎn)生; 在完成會話后,關(guān)閉連接。 程序具有簡單易用性。 /************************************************************ *函數(shù)名稱 : init_user_table *函數(shù)執(zhí)行失敗 : 當一個報文不能容納全部用戶名稱列表時 ,給出錯誤提示信息 ,結(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)。 pthread_mutex_unlock(amp。user_table_mutex)。user_table_mutex)。user_table_mutex)。 int i=0。 } /************************************************************ *函數(shù)名稱 : init_server_socket *功能說明 : 初始化服務(wù)器用于監(jiān)聽的的 socket *正常返回值 : 已經(jīng)初始化的服務(wù)器用于監(jiān)聽的的 socket *函數(shù)執(zhí)行失敗 : 輸出錯誤信息 ,退出程序 *************************************************************/ int init_server_socket() { struct sockaddr_in server_addr。 bzero((char*)amp。 《網(wǎng)絡(luò)編程》課程設(shè)計 12 client_socket = look_up_socket(receiver)。 bzero((char*)amp。 int server_socket = init_server_socket()。child_thread_attr,talk_to_client, (void *)new_server_socket) 0 ) printf(pthread_create Failed : %s\n,strerror(errno))。 //INADDR_ANY 表示自動獲取本機地址 = htons(0)。 //向服務(wù)器發(fā)起連接 ,連接成功后 client_socket 代表了客戶機和服務(wù)器的一個 socket 連接 if(connect(client_socket,(struct sockaddr*)amp。 exit(0)。 int length = recv(client_socket,(char*)amp。 // 一個很大的緩沖區(qū) , 實際ID_SIZE 內(nèi)有效 bzero(receiver_user_ID,BUFFER_SIZE)。 send_request_to_server(mand_option, 0, 0, 0)。 case EXIT: send_request_to_server(mand_option, 0, 0, 0)。 if(GET_MESSAGE==mand_option) response=receive_result_from_server_noblock(option, message_from, message)。 圖 13 查詢在線人數(shù) 圖 13 查詢在線人數(shù) (左側(cè) server 端,右側(cè) client 端) 初次運行 系統(tǒng)顯示無人在線。一旦接到連接請求,服務(wù)方可以根據(jù)情況建立或拒絕連接。 《網(wǎng)絡(luò)編程》課程設(shè)計 26 【 9】 (英 )馬修 //(英 )斯通斯 |譯者 :陳健 , 《 Linux 程序設(shè)計 (第 3 版 )》 , 人民郵電出版社 ,20200701。 【 3】 常志文 , 《 TCP/IP 網(wǎng)絡(luò)互連第 3 卷 :客戶 /服務(wù)器編程及應(yīng)用 :Linux/POSIX Socket》 ,人民郵電出版社 , 2020 年 1 月第一版。當兩個應(yīng)用之間需要采用 SOCKET 通信時,首先需要在兩個應(yīng)用之間(可《網(wǎng)絡(luò)編程》課程設(shè)計 25 能位于同一臺機器,也可能位于不同的機器)建立 SOCKET 連接,發(fā)起呼叫連接請求的一方為客戶方,接受呼叫連接請求的一方成為服務(wù)方。 exit(1)。 bzero(option,OPTION_SIZE+1)。 case TALK_TO: printf(Input Receiver User_ID:)。 scanf(%d,amp。 user_iduser_list_buffer+MESSAGE_SIZE。 return 。 if(option) memcpy(, option, OPTION_SIZE)。 = AF_INET。 // 一個很大的緩沖區(qū) , 實際PASSWORD_SIZEE 內(nèi)有效 static int client_socket。client_addr,amp。buffer)。 send(client_socket, (chat_package *)amp。 case GET_USER_LIST: memcpy(, USER_LIST, OPTION_SIZE)。server_addr,sizeof(server_addr))) { printf(Server Bind Port : %d Failed!, CHAT_SERVER_PORT)。 pthread_mutex_unlock(amp。 return SUCCEED。iUSER_AMOUNT_MAX。 } } for(i=0。 int i=0。 int i=0。 《網(wǎng)絡(luò)編程》課程設(shè)計 4 *關(guān)鍵問題 : * 客戶機和服務(wù)器之間協(xié)議制訂 * 多線程訪問同一個用戶列表的互斥問題 *************************************************************/ include include sys/ include define LENGTH_OF_LISTEN_QUEUE (20) define USER_AMOUNT_MAX (50)
點擊復(fù)制文檔內(nèi)容
畢業(yè)設(shè)計相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1