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

正文內(nèi)容

基于linux網(wǎng)絡(luò)聊天室的設(shè)計(jì)3(參考版)

2025-06-21 16:47本頁面
  

【正文】 客戶端運(yùn)行結(jié)果如實(shí)驗(yàn)圖42所示。2) 發(fā)送消息“hello!“和”Good!”給服務(wù)器端;3) 接收服務(wù)器發(fā)來的消息“OK!”。服務(wù)器端運(yùn)行結(jié)果如實(shí)驗(yàn)圖41所示。1) 客戶端、服務(wù)器端窗皆通過鍵盤輸入消息內(nèi)容平回車,以發(fā)送消息給對(duì)方;2) 消息中若使用空格,則作為本條消息結(jié)束及下一條消息的開始;3) 輸入exit則推出運(yùn)行。(4) 再打開另一個(gè)窗口或者在另一個(gè)主機(jī)上打開一個(gè)窗口,運(yùn)行client,輸入服務(wù)器的IP地址,并檢查器結(jié)果的正確性。測(cè)試軟件:putty、vmware虛擬機(jī)(1) ,用 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ù)來接受請(qǐng)求。/*sockfd 是分配的socket名字,myaddr則便是分配好的端口與IP,用bind綁定*/b) 利用listen監(jiān)聽請(qǐng)求(2) 發(fā)送請(qǐng)求1)利用gethostbyname獲取主機(jī)信息。 /*用連接地址自動(dòng)填充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ù)報(bào)socket內(nèi)部之間的通信。 功能:發(fā)送信息。 Servaddr:表示村訪目的端口和ip地址(套接字)的數(shù)據(jù)結(jié)構(gòu)。 作用:在面向連接的系統(tǒng)中客戶及連接服務(wù)器時(shí)使用,connect必須在bind后使用。 Addrlen:表示地址的長(zhǎng)度。 參數(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的文件描述符號(hào)。其中,SOCK_STREAM表明使用的是TCP協(xié)議,這樣提供按順序的、可靠的、雙向、面向連接的比特流;SOCKE_DGRAM表明使用的是UDP協(xié)議,這樣只會(huì)提供定長(zhǎng)、不可靠、無連接的通信。AF_INT是針對(duì)Internet的,因而可以允許在遠(yuǎn)程主機(jī)之間通信,實(shí)驗(yàn)中使用AF_INT。 參數(shù)說明: Family:表示地址族,可以去AF_UNLX和AF_INT。因此,對(duì)于從每個(gè)客戶端發(fā)來的請(qǐng)求,服務(wù)器端都要?jiǎng)?chuàng)建相應(yīng)的線程去接收并處理;同理,對(duì)于客戶端而言,也要?jiǎng)?chuàng)建一個(gè)線程去讀取服務(wù)器端發(fā)來的信息。因此,本實(shí)驗(yàn)需要使用兩個(gè)線程去分別完成發(fā)送和接收信息的任務(wù),這兩個(gè)線程共享其進(jìn)程擁有的統(tǒng)一個(gè)端口地址。因此,不能通過創(chuàng)建進(jìn)程方式來解決上訴問題,因?yàn)閮蓚€(gè)進(jìn)程會(huì)分別對(duì)應(yīng)兩個(gè)不同的端口,而發(fā)送和接收必須使用同一端口。這樣,當(dāng)接收信息任務(wù)因沒有信息而被阻塞時(shí),不至于影響發(fā)送任務(wù)的執(zhí)行。使用一個(gè)進(jìn)程去完成發(fā)送信息是沒有問題的,因?yàn)榘l(fā)送總是主動(dòng)的;而使用同一個(gè)進(jìn)程再去完成接受信息去不一定會(huì)成功,因?yàn)榻邮苄畔⑹潜粍?dòng)的,所以當(dāng)沒有信息可以接收時(shí),該進(jìn)程就會(huì)被阻塞,從而導(dǎo)致發(fā)送任務(wù)也一起被阻塞。而每個(gè)進(jìn)程進(jìn)行通信的環(huán)節(jié)都包括了發(fā)送信息和接口信息兩個(gè)任務(wù),這兩個(gè)任務(wù)通過一個(gè)端口地址發(fā)送和接收。這是
點(diǎn)擊復(fù)制文檔內(nèi)容
環(huán)評(píng)公示相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1