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

正文內容

基于socket的聊天系統(tǒng)設計(編輯修改稿)

2025-12-16 03:28 本頁面
 

【文章內容簡介】 設計 10 return SUCCEED。 } } pthread_mutex_unlock(amp。user_table_mutex)。 return FAIL。 } /************************************************************ *函數名稱 : init_server_socket *功能說明 : 初始化服務器用于監(jiān)聽的的 socket *正常返回值 : 已經初始化的服務器用于監(jiān)聽的的 socket *函數執(zhí)行失敗 : 輸出錯誤信息 ,退出程序 *************************************************************/ int init_server_socket() { struct sockaddr_in server_addr。 bzero(amp。server_addr,sizeof(server_addr))。 = AF_INET。 = htons(INADDR_ANY)。 = htons(CHAT_SERVER_PORT)。 int server_socket = socket(AF_INET,SOCK_STREAM,0)。 if( server_socket 0) { printf(Create Socket Failed!)。 exit(1)。 } if( bind(server_socket,(struct sockaddr*)amp。server_addr,sizeof(server_addr))) { printf(Server Bind Port : %d Failed!, CHAT_SERVER_PORT)。 exit(1)。 } if ( listen(server_socket, LENGTH_OF_LISTEN_QUEUE) ) { printf(Server Listen Failed!)。 exit(1)。 《網絡編程》課程設計 11 } return server_socket。 } /************************************************************ *函數名稱 : process_request *功能說明 : 根據接收到的報文的內容 ,進行響應的服務 . * 服務類型包括 :注冊 ,登錄 ,獲取已登錄用戶列表 ,向用戶發(fā)送信息 ,退出 ,修改注冊信息 *正常返回值 : 服務器對用戶發(fā)回的響應類型 *函數執(zhí)行失敗 : 沒有檢測和處理 *參數說明 : client_socket 是服務器與用戶通信的 socket * receive_buffer 為服務器收到的報文的內容 *依賴自定義數據結構 : chat_package *************************************************************/ int process_request(int client_socket, char * receive_buffer) { chat_package send_buffer。 bzero((char*)amp。send_buffer,BUFFER_SIZE)。 char * user_ID = ((chat_package *)receive_buffer)from。 char * password = ((chat_package *)receive_buffer)password。 char * receiver = ((chat_package *)receive_buffer)to。 printf(Request %d from client\n,((chat_package *)receive_buffer)type)。 switch(((chat_package *)receive_buffer)type) { case REGISTER: = user_register(user_ID, password, client_socket)。 break。 case LOGIN: = login(user_ID, password, client_socket)。 break。 case GET_USER_LIST: memcpy(, USER_LIST, OPTION_SIZE)。 = get_active_user_list()。 break。 case TALK_TO: = SUCCEED。 send(client_socket, (chat_package *)amp。send_buffer,BUFFER_SIZE,0)。 《網絡編程》課程設計 12 client_socket = look_up_socket(receiver)。 = TRANSFER。 memcpy(, ((chat_package *)receive_buffer)from, MESSAGE_SIZE)。 memcpy(, ((chat_package *)receive_buffer)message, MESSAGE_SIZE)。 break。 case EXIT: deactive_user(client_socket)。 return 。 break。 case CHANGE: = user_change_register(user_ID, password, client_socket)。 } printf(Answer %d to client\n,)。 send(client_socket, (chat_package *)amp。send_buffer,BUFFER_SIZE,0)。 return 。 } /************************************************************ *函數名稱 : talk_to_client *功能說明 : 對單獨的一個用戶的各種請求進行服務 ,當用戶的請求 為 EXIT時 ,結束本線程 *函數執(zhí)行失敗 : 通信失敗時 ,顯示錯誤信息 ,結束本線程 *依賴自定義數據結構 : chat_package *************************************************************/ void * talk_to_client(void * new_server_socket_to_client) { int new_server_socket = (int)new_server_socket_to_client。 int request = NO_COMMAND。 while(request!=EXIT) { chat_package buffer。 bzero((char*)amp。buffer,BUFFER_SIZE)。 int length = recv(new_server_socket,(char*)amp。buffer,BUFFER_SIZE,0)。 if (length 0) 《網絡編程》課程設計 13 { printf(Server Recieve Data Failed!\n)。 close(new_server_socket)。 pthread_exit(NULL)。 } if (length==0) { close(new_server_socket)。 pthread_exit(NULL)。 } request = process_request(new_server_socket, (char*)amp。buffer)。 } close(new_server_socket)。 pthread_exit(NULL)。 } int main(int argc, char **argv) { init_user_table()。 pthread_mutex_init(amp。user_table_mutex, NULL)。 int server_socket = init_server_socket()。 pthread_t child_thread。 pthread_attr_t child_thread_attr。 pthread_attr_init(amp。child_thread_attr)。 pthread_attr_setdetachstate(amp。child_thread_attr,PTHREAD_CREATE_DETACHED)。 while (1) { struct sockaddr_in client_addr。 socklen_t length = sizeof(client_addr)。 int new_server_socket = accept(server_socket,(struct sockaddr*)amp。client_addr,amp。length)。 if ( new_server_socket 0) { printf(Server Accept Failed!\n)。 《網絡編程》課程設計 14 break。 } if( pthread_create(amp。child_thread,amp。child_thread_attr,talk_to_client, (void *)new_server_socket) 0 ) printf(pthread_create Failed : %s\n,strerror(errno))。 } close(server_socket)。 pthread_attr_destroy(amp。child_thread_attr)。 pthread_mutex_destroy(amp。user_table_mutex)。 pthread_exit (NULL)。 return 0。 } 客戶端 /************************************************************ * 基于 socket 的聊天客戶機 *設計思路 : * 客戶機提出各種請求 ,服務器根據不同請求 ,發(fā)送不同的響應 . *關鍵問題 : * 客戶機和 服務器之間協(xié)議制訂 *************************************************************/ include include // for fork include sys/ // for signal include sys/ // for wait include static char user_ID[BUFFER_SIZE]。 //一個很大的緩沖區(qū) ,實際 ID_SIZE內有效 static char password[BUFFER_SIZE]。 // 一個很大的緩沖區(qū) , 實際PASSWORD_SIZEE 內有效 static int client_socket。 /************************************************************ *函數名稱 : connect_to_server *正常返回值 :
點擊復制文檔內容
畢業(yè)設計相關推薦
文庫吧 www.dybbs8.com
備案圖片鄂ICP備17016276號-1