日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢(xún)
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷(xiāo)解決方案
「實(shí)現(xiàn)UDP聊天,附Linux代碼」(linux基于udp的聊天程序代碼)

實(shí)現(xiàn)UDP聊天,附Linux代碼

創(chuàng)新互聯(lián)公司是一家專(zhuān)業(yè)提供雅安企業(yè)網(wǎng)站建設(shè),專(zhuān)注與成都網(wǎng)站建設(shè)、網(wǎng)站設(shè)計(jì)H5高端網(wǎng)站建設(shè)、小程序制作等業(yè)務(wù)。10年已為雅安眾多企業(yè)、政府機(jī)構(gòu)等服務(wù)。創(chuàng)新互聯(lián)專(zhuān)業(yè)網(wǎng)絡(luò)公司優(yōu)惠進(jìn)行中。

近年來(lái),隨著互聯(lián)網(wǎng)和移動(dòng)設(shè)備的普及,聊天工具成為了人們?nèi)粘I詈凸ぷ鞑豢苫蛉钡囊徊糠?,而其中UDP協(xié)議在實(shí)現(xiàn)輕量級(jí)即時(shí)通訊方面發(fā)揮著重要的作用。本文將詳細(xì)介紹如何通過(guò)UDP協(xié)議在Linux系統(tǒng)下實(shí)現(xiàn)簡(jiǎn)單的聊天功能,并附上相關(guān)代碼。

一、UDP介紹

UDP(User Datagram Protocol)用戶(hù)數(shù)據(jù)報(bào)協(xié)議是一種無(wú)連接的傳輸層協(xié)議,它不保證可靠性和完整性,但可以快速進(jìn)行數(shù)據(jù)傳輸,因此常用于實(shí)時(shí)性較強(qiáng)的應(yīng)用場(chǎng)景,例如音視頻傳輸、視頻游戲等。與TCP協(xié)議相比,UDP沒(méi)有建立連接和拆除連接的過(guò)程,傳輸速度更快且開(kāi)銷(xiāo)更??;但UDP也缺少數(shù)據(jù)包的確認(rèn)和重傳機(jī)制,容易發(fā)生丟包現(xiàn)象。

二、UDP聊天實(shí)現(xiàn)過(guò)程

1.初始化

在使用UDP協(xié)議進(jìn)行通信前,必須進(jìn)行一些初始化工作。下面的函數(shù)完成對(duì)socket的初始化,本例使用的是IPv4:

sockfd = socket(AF_INET, SOCK_DGRAM, 0);

if (sockfd

perror(“Error opening socket\n”);

exit(1);

}

memset(&servaddr, 0, sizeof(servaddr));

servaddr.sin_family = AF_INET;

servaddr.sin_addr.s_addr = htonl(INADDR_ANY);

servaddr.sin_port = htons(PORT);

2.發(fā)送數(shù)據(jù)

使用UDP協(xié)議發(fā)送數(shù)據(jù)時(shí),需要指定目標(biāo)主機(jī)的IP地址和端口號(hào)。下面的函數(shù)可以實(shí)現(xiàn)將數(shù)據(jù)發(fā)送到目標(biāo)地址:

sendto(sockfd, (const char *)msg, strlen(msg), MSG_CONFIRM, (const struct sockaddr *) &cliaddr,

sizeof(cliaddr));

其中,msg為要發(fā)送的消息,cliaddr包含目標(biāo)主機(jī)的IP和端口號(hào)。

3.接收數(shù)據(jù)

使用UDP協(xié)議接收數(shù)據(jù)時(shí),需要設(shè)置套接字為非阻塞模式,以避免進(jìn)程被掛起。下面的函數(shù)可以實(shí)現(xiàn)從指定端口號(hào)接收數(shù)據(jù):

n = recvfrom(sockfd, (char *)buffer, MAXLINE, MSG_WTALL, (struct sockaddr *) &cliaddr,

&len);

其中,buffer為接收數(shù)據(jù)的緩沖區(qū),MAXLINE為緩沖區(qū)的大小,cliaddr為接收地址信息。

4.綁定端口

在使用UDP協(xié)議進(jìn)行通信時(shí),需要為套接字綁定一個(gè)端口號(hào)。在下列代碼中,我們使用固定的端口號(hào),但也可以隨機(jī)選擇一個(gè)端口號(hào):

if ((bind(sockfd, (const struct sockaddr *)&servaddr, sizeof(servaddr)))

perror(“Error binding to socket\n”);

exit(1);

}

因?yàn)閁DP協(xié)議是無(wú)連接的,所以多個(gè)進(jìn)程可以通過(guò)同一個(gè)端口號(hào)進(jìn)行通信。但如果多個(gè)進(jìn)程綁定到同一個(gè)端口號(hào),則只有最后一個(gè)進(jìn)程能夠接收到數(shù)據(jù)包。

三、完整代碼實(shí)現(xiàn)

下面是一個(gè)運(yùn)行良好的UDP聊天程序,它能夠?qū)崿F(xiàn)雙方之間的交互。需要注意的是,該程序是基于Linux系統(tǒng)開(kāi)發(fā)的,Windows環(huán)境下需要進(jìn)行相應(yīng)的修改:

#include

#include

#include

#include

#include

#include

#include

#include

#define PORT 8080

#define MAXLINE 1024

int mn() {

int sockfd;

char buffer[MAXLINE];

char *hello = “Hello from server”;

struct sockaddr_in servaddr, cliaddr;

// Creating socket file descriptor

sockfd = socket(AF_INET, SOCK_DGRAM, 0);

if (sockfd

perror(“socket creation fled”);

exit(EXIT_FLURE);

}

memset(&servaddr, 0, sizeof(servaddr));

memset(&cliaddr, 0, sizeof(cliaddr));

// Filling server information

servaddr.sin_family = AF_INET; // IPv4

servaddr.sin_addr.s_addr = INADDR_ANY;

servaddr.sin_port = htons(PORT);

// Bind the socket with the server address

if (bind(sockfd, (const struct sockaddr *)&servaddr, sizeof(servaddr))

perror(“bind fled”);

exit(EXIT_FLURE);

}

int len, n;

len = sizeof(cliaddr); //len is value/result

while (1) {

n = recvfrom(sockfd, (char *)buffer, MAXLINE, MSG_WTALL, (struct sockaddr *)&cliaddr,

&len);

buffer[n] = ‘\0’;

printf(“Client : %s\n”, buffer);

if (strcmp(buffer, “exit”) == 0) {

printf(“Client Exit…\n”);

break;

}

printf(“Server : “);

fgets(buffer, MAXLINE, stdin);

sendto(sockfd, (const char *)buffer, strlen(buffer), MSG_CONFIRM, (const struct sockaddr *)&cliaddr,

len);

if (strcmp(buffer, “exit\n”) == 0) {

printf(“Server Exit…\n”);

break;

}

bzero(buffer, MAXLINE);

}

close(sockfd);

return 0;

}

四、

成都網(wǎng)站建設(shè)公司-創(chuàng)新互聯(lián),建站經(jīng)驗(yàn)豐富以策略為先導(dǎo)10多年以來(lái)專(zhuān)注數(shù)字化網(wǎng)站建設(shè),提供企業(yè)網(wǎng)站建設(shè),高端網(wǎng)站設(shè)計(jì),響應(yīng)式網(wǎng)站制作,設(shè)計(jì)師量身打造品牌風(fēng)格,熱線:028-86922220

關(guān)于linux下udp的問(wèn)題…

很想幫你但力不從心啊。頂

首先:udp是不需要accept的,因?yàn)樗皇沁B接的,不需要accept;

也就衫塵宏是說(shuō)你在bind好了過(guò)后就直接while(1)就可以了。

這個(gè)里面用的函數(shù)有些變化,發(fā)送用 sendto, 接收用 recvfrom

這兩個(gè)函數(shù)你可以直接在終端下面輸入: man sendto 以及 man recvfrom查看他們或冊(cè)的參數(shù)以及返兄和回值問(wèn)題。

ps:在Linux下面編程要多看看它的函數(shù):

這其中就包括了Linux下面常用的c函數(shù), 你可以去看看

linux課程設(shè)計(jì)聊天qt

1. 求一份linux環(huán)境下的qt creator教程,更好是包含有關(guān)C編程的~~~謝了!

Qt creator是跨平臺(tái)的,你可以在Windows下編程,編譯的時(shí)候再拿到linux下重新編譯一下就OK了,Qt和C++語(yǔ)言類(lèi)版似,而且權(quán)Qt有自己的幫助文檔,多看看多試試,網(wǎng)上QT的視頻,看完了跟著做一下,或者你字節(jié)上網(wǎng)搜事件隊(duì)列處理,事件響應(yīng),信號(hào)和槽,這3樣都會(huì)了,做啥你都有思路了~

希望對(duì)你有所幫助!

2. 您好!向您請(qǐng)教一個(gè)問(wèn)題linux下桐碰QT界面,程序1如何獲取程序2的窗口句柄

linux Qt 下不流行句柄哪輪老. Qt 下要訪問(wèn)一個(gè)窗口用的是指針.

程序1 想獲取, 程序 2 的窗口句柄屬于進(jìn)程間專(zhuān)通屬信.

進(jìn)程間通信有多種方法.如果找同一臺(tái)機(jī)器上我推薦用有名管道. 但是由于每個(gè)進(jìn)程都有自己的地址空間.進(jìn)程間不能直李升接訪問(wèn)對(duì)方的地址.所有說(shuō)不管你有沒(méi)有成功獲得這個(gè)句柄,這個(gè)句柄都是不能用的..

3. Qt用windows下的工具開(kāi)發(fā)的界面能否放在linux下面使用如果能,這和linux下有什么區(qū)別

只調(diào)用QT庫(kù)或是標(biāo)準(zhǔn)庫(kù)的話,只要重新編譯就行,linux下有專(zhuān)用的Qt Creator,用法和WINDOWS類(lèi)似

4. linux下QT編程,就是寫(xiě)一個(gè)可視界面程序,輸入局域網(wǎng)內(nèi)某人IP,就可以和他聊天

這個(gè)程序很簡(jiǎn)單啊 要用到QUdpSocket等類(lèi)

5. 如何用qt在linux中編寫(xiě)并使用動(dòng)態(tài)鏈接庫(kù)

先寫(xiě)好實(shí)現(xiàn)動(dòng)態(tài)鏈接庫(kù)的libmy.cpp文件和libmy.h文件,如下:

// libmy.cpp

#include”libmy.h”

#include

using namespace std;

MyLib::MyLib()

{

}

MyLib::~MyLib()

{

}

void MyLib::hello()

{

cout setupUi(this);

QPixmap pixmap(“:/img/background.bmp”);

QPalette palette;

palette.setBrush(backgroundRole(), QBrush(pixmap));

setPalette(palette);

}

此外也可實(shí)現(xiàn)繼承自父類(lèi)QMainWindow的虛函數(shù)paintEvent,并在該函數(shù)中加入同樣代碼。

關(guān)于linux基于udp的聊天程序代碼的介紹到此就結(jié)束了,不知道你從中找到你需要的信息了嗎 ?如果你還想了解更多這方面的信息,記得收藏關(guān)注本站。

成都創(chuàng)新互聯(lián)科技公司主營(yíng):網(wǎng)站設(shè)計(jì)、網(wǎng)站建設(shè)、小程序制作、成都軟件開(kāi)發(fā)、網(wǎng)頁(yè)設(shè)計(jì)、微信開(kāi)發(fā)、成都小程序開(kāi)發(fā)、網(wǎng)站制作、網(wǎng)站開(kāi)發(fā)等業(yè)務(wù),是專(zhuān)業(yè)的成都做小程序公司、成都網(wǎng)站建設(shè)公司成都做網(wǎng)站的公司。創(chuàng)新互聯(lián)公司集小程序制作創(chuàng)意,網(wǎng)站制作策劃,畫(huà)冊(cè)、網(wǎng)頁(yè)、VI設(shè)計(jì),網(wǎng)站、軟件、微信、小程序開(kāi)發(fā)于一體。


分享標(biāo)題:「實(shí)現(xiàn)UDP聊天,附Linux代碼」(linux基于udp的聊天程序代碼)
文章起源:http://www.dlmjj.cn/article/djsoioj.html