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

正文內(nèi)容

基于linux網(wǎng)絡(luò)聊天室的設(shè)計_畢業(yè)設(shè)計論文(參考版)

2024-08-31 15:24本頁面
  

【正文】 。 客戶端運(yùn)行結(jié)果如實驗圖 42 所示。 2) 發(fā)送消息“ hello!“和” Good!‖給服務(wù)器端; 3) 接收服務(wù)器發(fā)來的消息“ OK!‖。 服務(wù)器端運(yùn)行結(jié)果如實驗圖 41 所示。 1) 客戶端、服務(wù)器端窗皆通過鍵盤輸入消息內(nèi)容平回車,以發(fā)送消息給對方; 2) 消息中若使用空格,則作為本條消息結(jié) 束及下一條消息的開始; 3) 輸入 exit 則推出運(yùn)行。 (4) 再打開另一個窗口或者在另一個主機(jī)上打開一個窗口,運(yùn)行 client,輸入服務(wù)器的 IP 地址,并檢查器結(jié)果的正確性。 測試軟件: putty、 vmware 虛擬機(jī) (1) 在編寫 完 TCP 服務(wù)端程序 后,用 gcc –lpthread –o server 生成程序 server。 } } return 0。 close(sockfd)。 exit(1)。 if(send(sockfd,msg,strlen(msg),0) == 1){ perror(send)。 } while(1){ char msg[MAXDATASIZE]。recthread,NULL,(void *)recmessage,NULL))!=0){ printf(Create thread error!\r\n)。 exit(1)。 if(connect(sockfd,(struct sockaddr *)amp。 bzero(amp。 = htons(PORT)。 exit(1)。 exit(1)。 exit(1)。 struct sockaddr_in their_addr。 } printf(Server:%s\n,buf)。 close(sockfd)。\039。 exit(1)。 char buf[MAXDATASIZE]。 pthread_t recthread。 } } return 0。 close(sockfd)。 } if(strcmp(msg,exit) == 0){ printf(Byebye!\n)。 close(new_fd)。 scanf(%s,msg)。 exit(1)。 } if((pthread_create(amp。 } if(listen(sockfd,BACKLOG) == 1){ perror(listen)。my_addr,sizeof(struct sockaddr)) == 1){ perror(bind)。(),8)。 = INADDR_ANY。 } = AF_INET。 if((sockfd = socket(AF_INET,SOCK_STREAM,0)) == 1){ perror(socket)。 exit(1)。 if((pthread_create(amp。 exit(1)。their_addr,amp。 sin_size = sizeof(struct sockaddr_in)。 } } void acceptconnect(void){ struct sockaddr_in their_addr。 exit(1)。 close(new_fd)。\039。 exit(1)。 char buf[MAXDATASIZE]。 pthread_t accthread,recthread。 2)創(chuàng)建子進(jìn)程,顯示歡迎信息; 3)接收返回信息,顯示連接成功,并推出連接; 4)關(guān)閉客戶端口 socket; 5)關(guān)閉服務(wù)端 socket, 結(jié)束子線程。 3)利用 connect 函數(shù)將自己的 IP 地址等信息發(fā)送到主機(jī),等待主機(jī)調(diào)用accept 函數(shù)來接受請求。 /*sockfd 是分配的 socket 名字, myaddr 則便是分配好的端口與 IP,用 bind綁定 */ b) 利用 listen 監(jiān)聽請求 (2) 發(fā)送請求 1)利用 gethostbyname 獲取主機(jī)信息。 /*用連接地址自動填充 ip*/ Bind(sockfd,(stuct sockaddr*)amp。 /*將地址族類型設(shè)定好 */ =htons(MYPORT。 a) 利用 bind 函數(shù)綁定端口和 IP 地址。 Sockfd = socket( AF_INT, SOCK_STREAM,0) 2) 此步驟涉及到 IP 地址及其處理過程。 參數(shù)說明: How 的值為下面一種: 0不允許繼續(xù)接收; 1不允許繼續(xù)發(fā)送; 2不允許繼續(xù)發(fā)送和接收。 作用:用于流式 socket、數(shù)據(jù) 報 socket 內(nèi)部之間的通信。 功能:發(fā)送信息。 Servaddr:表示村訪目的端口和 ip 地址(套接字)的數(shù)據(jù)結(jié)構(gòu)。 作用:在面向連接的系統(tǒng)中客戶及連接服務(wù)器時使用, connect 必須在 bind 后使用。 Addrlen:表示地址的長度。 參數(shù)說明: Sockfd:表示 socket 的文件描述符。 (4) accept() 格式: Int accept (int sockfd, void *addr, int *addrlen)。 參數(shù)說明: Sockfd:表示 socket 調(diào)用返回的文件描述符。 (3) listen() 格式: int listen(int sockfd, int backlog)。 參數(shù)說明: Sockfd: socket 的文件描述符號。其中, SOCK_STREAM 表明使用的是 TCP 協(xié)議,這樣提供按順序的、可靠的、雙向、面向連接的比特流; SOCKE_DGRAM 表明使用的是UDP 協(xié)議,這樣只會提供定長、不可靠、無連接的通信。AF_INT 是針對Inter 的,因而可以允許在遠(yuǎn)程主機(jī)之間通信,實驗中使用 AF_INT。 參數(shù)說明: Family:表示地址族,可以去 AF_UNLX 和 AF_INT。 因此,對于從每個客戶端發(fā)來的請求,服務(wù)器端都要創(chuàng)建相應(yīng)的線程去接收并處理;同理,對于客戶端而言,也要創(chuàng)建一個線程去讀取服務(wù)器端發(fā)來的信息。因此,本實驗需要使用兩個線程去分別完成發(fā)送和接收信息的任務(wù),這兩個線程共享其進(jìn)程擁有的統(tǒng)一個端口地址。因此,不能通過創(chuàng)建進(jìn)程方式來解決上訴問題,因為兩個 進(jìn)程會分別對應(yīng)兩個不同的端口,而發(fā)送和接收必須使用同一端口。這樣,當(dāng)接收信息任務(wù)因沒有信息而被阻塞時,不至于影響發(fā)送任務(wù)的執(zhí)行。使用一個進(jìn)程去完成發(fā)送信息是沒有問題的,因為發(fā)送總是主動的;而使用同一個進(jìn) 程再去完成接受信息去不一定會成功,因為接受信息是被動的,所以當(dāng)沒有信息可以接收時,該進(jìn)程就會被阻塞,從而導(dǎo)致發(fā)送任務(wù)也一起被阻塞。而每個進(jìn)程進(jìn)行通信的環(huán)節(jié)都包括了發(fā)送信息和接口信息兩個任務(wù),這兩個任務(wù)通過一個端口地址發(fā)送和接收。 這是通過 Socket 實現(xiàn)點對點通信需要掌握的 4 個編程要點。 (3) 按要求通過 socket 發(fā)送和接受數(shù)據(jù)。 Socket 接口上 TCP/IP 網(wǎng)絡(luò)應(yīng)用程序接口( API),它提供了許多函數(shù)和例程,程序員可以使用它們來開發(fā) TCP/IP 網(wǎng)絡(luò)應(yīng)用程序。
點擊復(fù)制文檔內(nèi)容
環(huán)評公示相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1