最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

基于Linux的網(wǎng)絡(luò)編程——網(wǎng)絡(luò)聊天程序

2023-08-05 21:25 作者:林快樂的LIN  | 我要投稿

? ? ? ? 網(wǎng)絡(luò)聊天程序是目前應(yīng)用極為廣泛的一種網(wǎng)絡(luò)軟件,對于方便人們的交流溝通非常有效,同時,作為一種典型的網(wǎng)絡(luò)應(yīng)用,編寫網(wǎng)絡(luò)聊天程序是學(xué)習(xí)基于Linux的網(wǎng)絡(luò)編程的有效方法。

? ? ? ? 結(jié)合任務(wù)需求設(shè)計該程序,程序采用多線程方式實現(xiàn)不同主機(jī)之間的通信。除滿足基礎(chǔ)要求之外,還考慮到通信私密性及多用戶的問題,程序通過上鎖和解鎖,實現(xiàn)公開通信和隱秘通信兩種通信方式,客戶端輸入用戶名即可進(jìn)入隱秘通信模式,輸入ALL返回公開通信模式,默認(rèn)使用公開通信;通過設(shè)置用戶名變量,實現(xiàn)多用戶同時通信,在實現(xiàn)多用戶功能的同時,用戶過多輸入會使數(shù)據(jù)溢出,因此設(shè)置用戶上限以解決此問題,某一客戶端退出并不影響其他客戶的使用,所有用戶全部退出,服務(wù)器關(guān)閉端口,結(jié)束進(jìn)程。

? ? ? ?程序基于Linux系統(tǒng)開發(fā),純C語言Socket實現(xiàn)多個客戶端之間通信,由服務(wù)器端進(jìn)行數(shù)據(jù)處理,基本實現(xiàn)聊天功能的基礎(chǔ)運(yùn)用。

目錄

1? 設(shè)計目的? ? ??

2? 設(shè)計思路

2.1? 服務(wù)器主線程程序框架

2.2? 服務(wù)器連接客戶接發(fā)信息框架

2.3? 客戶端主線程程序框架

2.4? 客戶端信息接發(fā)程序框架

3? 設(shè)計測試

3.1? 公開通信模式

3.2? 隱秘通信模式

4? 主要代碼

4.1? 客戶端主函數(shù)代碼

4.2? 服務(wù)器主函數(shù)代碼



1? 設(shè)計目的? ? ??

? ? ? ? 在使用Linux線程和Socket接口的基礎(chǔ)上,編寫網(wǎng)絡(luò)聊天程序,從而掌握Linux應(yīng)用程序開發(fā)的基本方法,練習(xí)Linux線程及Socket編程的方法。

2? 設(shè)計思路

2.1? 服務(wù)器主線程程序框架

圖2.1 服務(wù)器主線程程序框圖

2.2? 服務(wù)器連接客戶接發(fā)信息框架

圖2.2 服務(wù)器連接客戶接發(fā)信息框圖

2.3? 客戶端主線程程序框架

圖2.3 服務(wù)器連接客戶接發(fā)信息框圖

2.4? 客戶端信息接發(fā)程序框架

圖2.4 服務(wù)器連接客戶接發(fā)信息框圖

3? 設(shè)計測試

? ? ? ?模擬四個用戶同時在線通信,分別自命名用戶1、用戶2、用戶3和用戶4。

圖3.1 服務(wù)器端顯示內(nèi)容圖

圖3.2 客戶端顯示內(nèi)容圖

3.1? 公開通信模式

? ? ? ?公開通信模式下,由任意用戶發(fā)送信息,其余用戶會同時收到信息內(nèi)容:

圖3.3 用戶1發(fā)送消息效果圖

圖3.4 用戶2發(fā)送消息效果圖

3.2? 隱秘通信模式

? ? ? ?隱秘模式下用戶輸入接收信息用戶名稱得以實現(xiàn)該用戶至目標(biāo)用戶單向信息隱秘通信,另一方若需要隱匿通信需要輸入該用戶名稱,實現(xiàn)雙向信息隱秘通信。

圖3.5 用戶1向用戶2隱秘通信效果圖

圖3.6 用戶2回應(yīng)用戶1信息效果圖

圖3.7 用戶3和用戶4之間進(jìn)行雙向隱秘通信效果圖


4? 主要代碼


4.1? 客戶端主函數(shù)代碼

int main(int argc, char* argv[])

{

? ? //創(chuàng)建套接字文件,返回套接字文件描述符 socket()

? ? sockfd = socket(AF_INET, SOCK_STREAM, 0);

? ? pthread_t tid;

? ? if (sockfd == -1)

? ? {

? ? ? ? perror("socket create failure\r\n");

? ? ? ? return 0;

? ? }


? ? //創(chuàng)建結(jié)構(gòu),初始化數(shù)據(jù) struct sockaddr? ? ? 使用 struct sockaddr_in

? ? SIN ser_addr;

? ? ser_addr.sin_family = AF_INET; //選擇ipv4協(xié)議族??

? ? ser_addr.sin_port = htons(PORT);? //端口號要轉(zhuǎn)換端緒,從小端緒轉(zhuǎn)換從大端緒

? ? ser_addr.sin_addr.s_addr = inet_addr(IP); //十進(jìn)制的字符ip轉(zhuǎn)換成網(wǎng)端數(shù)據(jù)格式 服務(wù)端IP

? ? int len = sizeof(ser_addr);

? ? if (connect(sockfd, (SA*)&ser_addr, len) == -1)

? ? {

? ? ? ? perror("connect failure\r\n");

? ? ? ? return 0;

? ? }

? ? else

? ? {

? ? ? ? printf("WELCOME TO DADONG TALK ROOM!\r\n");

? ? ? ? printf("Please sign you name:");

? ? ? ? char temp[20] = { 0 };

? ? ? ? memset(temp, 0, 100);

? ? ? ? scanf("%s", temp);

? ? ? ? send(sockfd, temp, strlen(temp), 0); //發(fā)送信息

? ? ? ? pthread_create(&tid, NULL, message, NULL);

? ? }

? ? char wbuf[100] = { 0 };

? ? while (1)

? ? {

? ? ? ? memset(wbuf, 0, 100);

? ? ? ? read(0, wbuf, 100);

? ? ? ? if (strncmp(wbuf, "quit", 4) == 0)

? ? ? ? {

? ? ? ? ? ? send(sockfd, wbuf, strlen(wbuf), 0);

? ? ? ? ? ? final = 1;

? ? ? ? ? ? close(sockfd);

? ? ? ? ? ? return 0;

? ? ? ? }

? ? ? ? send(sockfd, wbuf, strlen(wbuf), MSG_NOSIGNAL);

? ? ? ? memset(wbuf, 0, 100);

? ? ? ? usleep(20);

? ? }

? ? close(sockfd);

? ? return 0;

}


4.2? 服務(wù)器主函數(shù)代碼

int main(int argc, char* argv[])

{

? ? //創(chuàng)建套接字文件,返回套接字文件描述符 socket()

? ? pthread_mutex_init(&mm, NULL);

? ? pthread_t CON;

? ? pthread_create(&CON, NULL, user_connect, NULL); //分配連接的線程

? ? sleep(30); //30s等待連接

? ? while (count != user);

? ? printf("-------**********************************-------\n");

? ? printf("-------WELCOME JOIN DADONG TALK ROOM AGAIN-------\n");

? ? //關(guān)閉文件描述符 close()

? ? close(sockfd);

? ? return 0;

}

主頁資源有全部源碼供各位大佬下載參考,希望能得到大佬的改進(jìn)意見,會持續(xù)完善該項目。

基于Linux的網(wǎng)絡(luò)編程——網(wǎng)絡(luò)聊天程序的評論 (共 條)

分享到微博請遵守國家法律
延津县| 宜州市| 巧家县| 兴业县| 新密市| 长葛市| 固安县| 津南区| 盱眙县| 师宗县| 阿瓦提县| 余江县| 咸丰县| 乐山市| 德阳市| 五莲县| 原平市| 嘉兴市| 芦山县| 栾川县| 定安县| 满城县| 剑川县| 石屏县| 杭锦旗| 宁化县| 克什克腾旗| 卢龙县| 张北县| 红桥区| 屏山县| 辽宁省| 温泉县| 西丰县| 伊通| 大渡口区| 乌兰浩特市| 襄城县| 九江市| 香河县| 迁西县|