首页
学习
活动
专区
圈层
工具
发布
    • 综合排序
    • 最热优先
    • 最新优先
    时间不限
  • 来自专栏程序那些事

    网络协议之:socket协议详解之Datagram Socket

    当然TCP协议有个孪生兄弟叫做UDP,那么基于UDP来做传输协议的socket协议就叫做Datagram Socket,今天我们一起来详细了解一下Datagram Socket。 什么是Datagram Socket 和有连接的Stream Socket不同,Datagram Socket是无连接的。 Datagram Socket这种无连接的通常被用在容许数据部分丢失的场景,比如语音、视频等等,无连接的好处就是不需要TCP那样复杂的建立连接的步骤,所以相对而言更加简单。 总结 本文讲解了datagram socket的基本概念,并且使用一些unix的基本命令来构建了udp服务器和客户端,方便大家理解。 本文已收录于 http://www.flydean.com/16-datagram-socket/

    1.7K30编辑于 2022-04-01
  • 来自专栏计算机工具

    数据报(datagram)网络与虚电路(virtual-circuit)网络是典型两类分组交换网络。

    连接服务与无连接服务 数据报(datagram)网络与虚电路(virtual-circuit)网络是典型两类分组交换网络。

    39910编辑于 2024-12-17
  • 来自专栏Linux驱动

    64.QT-单播、广播、组播

    = udpSocket->receiveDatagram(); qDebug()<<QString(datagram.data())<<","<<datagram.senderAddress "1发送了数据"; QByteArray datagram = str.toUtf8().data(); udpSocket1->writeDatagram(datagram.data ->writeDatagram(datagram.data(),datagram.length(),QHostAddress::LocalHost,7755); // 发送给客户端1绑定的端口号(如果未绑定就会发送失败 = udpSocket->receiveDatagram(); qDebug()<<QString(datagram.data())<<","<<datagram.senderAddress 往组播地址发送数据了"; QByteArray datagram = str.toUtf8().data(); udpSocket3->writeDatagram(datagram.data

    2.6K10发布于 2021-06-29
  • 来自专栏Linux云计算网络

    A Day in the Life of a Web Page Request

    The IP datagram containing the DHCP request message is then placed within an Ethernet frame. The datagram’s broadcast IP destination address indicates that this IP datagram should be processed by Bob’s laptop then places the datagram containing the DNS query message in an Ethernet frame. Eventually the IP datagram containing the DNS query arrives at the DNS server. Eventually, the datagram containing the TCP SYN arrives at www.google.com.

    1.4K50发布于 2018-01-10
  • 来自专栏c++与qt学习

    CS 144 Lab Seven -- putting it all together

    Receive a datagram and the Address of its sender received_datagram recv(const size_t mtu = 65536) 将接收到的UDP数据报存储到datagram中 void UDPSocket::recv(received_datagram &datagram, const size_t mtu) { // datagram.payload.resize(mtu); socklen_t fromlen = sizeof(datagram_source_address); // 通过系统调用 (), datagram.payload.size(), MSG_TRUNC, datagram_source_address, &fromlen)); // 如果接收到的数据大小超过了 )"); } register_read(); // 记录数据包来源地址 datagram.source_address = {datagram_source_address

    48140编辑于 2023-10-11
  • 来自专栏impressionyang的个人分享

    Qt UDP广播

    ShareAddress); QObject::connect(brocast_client, &QUdpSocket::readyRead, this, [=]() { // QByteArray datagram ; datagram.resize(brocast_client->pendingDatagramSize()); brocast_client->readDatagram(datagram.data (), datagram.size()); emit getBrocastMsg(QString(datagram)); }); } 测试 带图形界面的测试 ?

    1.9K20发布于 2020-08-26
  • 来自专栏半生瓜のblog

    【QT】TCP、UDP通信

    UDP、TCP UDP UDP(User Datagram Protocol,用户数据报协议) UDP是一个轻量级、不可靠、面向数据报的、无连接的协议,多用与可靠性不严格,不是非常重要的传输。 this); } Widget::~Widget() { delete ui; } void Widget::on_pushButton_clicked() { QByteArray dataGram dataGram.size(), QHostAddress::Broadcast, ; dataGram.resize(m_receiver->pendingDatagramSize()); m_receiver->readDatagram(dataGram.data (),dataGram.size()); ui->label_2->setText(dataGram); } } ---- TCP TCP(Transmission Control

    1.5K10编辑于 2023-05-13
  • 来自专栏程序那些事

    网络协议之:socket协议详解之Unix domain Socket

    简介 之前的文章我们讲到了Socket中的Stream Socket和Datagram Socket,这两种Socket通常分别是基于tcp和udp协议来进行数据的传输。 和基于IP和端口的Socket一样,Unix domain Socket也可以分为Stream Socket和Datagram Socket。 /dev/null& 这里我们使用/tmp/datagram.sock来表示这个socket信息。 11882190 * 0 u_str表示的是UDS stream socket,而u_dg表示的是UDS datagram socket。 然后再连接Datagram UDS看看: nc -uU -z /tmp/datagram.sock 同样的,如果没有任何异常数据,说明Socket连接成功了。

    2.9K50编辑于 2022-04-01
  • 来自专栏C/C++进阶专栏

    Linux网络编程——UDP组播编程

    ; int datalen = sizeof(databuf); int main (int argc, char *argv[]) { /* * Create a datagram socket on which to send. */ sd = socket(AF_INET, SOCK_DGRAM, 0); if (sd < 0) { perror("opening datagram message"); } else { printf("sending datagram message ok! message"); close(sd); exit(1); } else { printf("get datagram message ok! 接收端: get datagram message ok! The message from multicast server is: "Multicast Data MSG!"

    6K40编辑于 2023-09-04
  • 来自专栏全栈程序员必看

    【Linux 内核网络协议栈源码剖析】recvfrom 函数剖析

    */ //从接收队列中获取数据包 skb=skb_recv_datagram(sk,flags,noblock,&er); if(skb==NULL) return er; } //释放该数据包 skb_free_datagram(skb); release_sock(sk); return(truesize);//返回读取(接收)到的数据的大小 } 上面在数据处理方面,调用了三个数据报文处理函数(net\inet\Datagram.c):skb_recv_datagram()、skb_copy_datagram()、skb_free_datagram () skb_recv_datagram() /* * Get a datagram skbuff, understands the peeking, nonblocking wakeups and It also finally fixes the long standing peek and read * race for datagram sockets.

    2.9K20编辑于 2022-09-15
  • C++ Qt开发:QUdpSocket实现组播通信

    其函数原型如下: qint64 QUdpSocket::writeDatagram( const QByteArray & datagram, const QHostAddress & groupAddress, quint16 port ) datagram:要发送的数据报的内容,通常是一个 QByteArray 对象。 ; datagram.resize(udpSocket->pendingDatagramSize()); QHostAddress peerAddr; quint16 peerPort; udpSocket->readDatagram(datagram.data(),datagram.size(),&peerAddr,&peerPort); QString str=datagram.data(); QString peer="[从 "+peerAddr.toString()+":"+QString::number(peerPort

    1.1K10编辑于 2024-03-21
  • 来自专栏开发与安全

    linux网络编程之TCP/IP基础(三):IP数据报格式和IP地址路由

    when a datagram is fragmented the total length field of each fragment is changed to be the size of that datagram) to send, or one that has been received from a network interface (a datagram to forward). The IP layer has a routing table in memory that it searches each time it receives a datagram to send If the datagram is not destined for this IP layer, then (1) if the IP layer was configured to act as (2) the datagram is silently discarded.

    2.4K70发布于 2018-01-03
  • 来自专栏C++开发学习交流

    【C++】Qt:TCP&UDP网络通信示例

    ; //定义接收的数组 datagram.resize(udpServer->pendingDatagramSize()); //设置接收数组的大小 udpServer->readDatagram (datagram.data(), datagram.size()); //读取数据 QString s = datagram.data(); //分离出需要的数据 ui->plainTextEdit Widget::recvData() { //接收数据定义 while (udpClient->hasPendingDatagrams()) { QByteArray datagram ; //定义接收的数组 datagram.resize(udpClient->pendingDatagramSize()); //设置接收数组的大小 udpClient->readDatagram (datagram.data(), datagram.size()); //读取数据 QString s = datagram.data(); //分离出需要的数据,定义为字符串s ui

    1.6K11编辑于 2024-07-24
  • 来自专栏全栈程序员必看

    tcptraceroute与traceroute

    首先,traceroute送出一个TTL是1的IP datagram(其实,每次送出的为3个40字节的包,包括源地址,目的地址和包发出的时间标签)到目的地,当路径上的第一个路由器(router)收到这个 datagram时,它将TTL减1。 ,便知道这个路由器存在于这个路径上,接着traceroute 再送出另一个TTL是2 的datagram,发现第2 个路由器…… traceroute 每次将送出的datagram的TTL 加1来发现另一个路由器 ,这个重复的动作一直持续到某个datagram 抵达目的地。 当datagram到达目的地后,该主机并不会送回ICMP time exceeded消息,因为它已是目的地了,那么traceroute如何得知目的地到达了呢?

    1K10编辑于 2022-08-31
  • 来自专栏全栈程序员必看

    Linux traceroute 命令详解

    首先,traceroute送出一个TTL是1的IP datagram(其实,每次送出的为3个40字节的包,包括源地址,目的地址和包发出的时间标签)到目的地,当路径上的第一个路由器(router)收到这个 datagram时,它将TTL减1。 traceroute 再送出另一个TTL是2 的datagram,发现第2 个路由器… traceroute 每次将送出的datagram的TTL 加1来发现另一个路由器,这个重复的动作一直持续到某个datagramdatagram到达目的地后,该主机并不会送回ICMP time exceeded消息,因为它已是目的地了,那么traceroute如何得知目的地到达了呢? Traceroute在送出UDP datagrams到目的地时,它所选择送达的端口号 是一个一般应用程序都不会用的号码(30000 以上),所以当此UDP datagram 到达目的地后该主机会送回一个

    4.5K120编辑于 2022-11-02
  • C++ Qt开发:QUdpSocket实现组播通信

    , quint16 port)datagram:要发送的数据报的内容,通常是一个 QByteArray 对象。 =msg.toUtf8(); udpSocket->writeDatagram(datagram,groupAddress,groupPort);}readDatagram 接收数据报readDatagram ; datagram.resize(udpSocket->pendingDatagramSize()); QHostAddress peerAddr; quint16 peerPort; udpSocket->readDatagram(datagram.data(),datagram.size(),&peerAddr,&peerPort); QString str=datagram.data(); QString peer="[从 "+peerAddr.toString()+":"+QString::number(peerPort

    2.2K10编辑于 2024-03-20
  • 来自专栏c++与qt学习

    CS 144 Lab Six -- building an IP router

    Send a single datagram from the appropriate outbound interface to the next hop, //! datagram's destination address. // 路由一个IP数据报 void route_one_datagram(InternetDatagram &dgram) \param[in] dgram The datagram to be routed // 根据路由表进行路由 void Router::route_one_datagram(InternetDatagram if (next_hop.has_value()) // 交给NetworkInterface,将这个数据报发送出去 interface.send_datagram (dgram, next_hop.value()); else // 目的主机与路由器位于相同的网络中 interface.send_datagram

    39220编辑于 2023-10-11
  • 来自专栏全栈程序员必看

    linux udp编程 绑定失败_udp socket编程

    Data; typedef struct { Ip ip; Port port; }Address; typedef struct { Address address; Data data; }Datagram (void); ~UDP(void); void close(void); void bind(Port port); void send(Ip ip, Port port, Data data); Datagram ip << "] [port=" << port << "] [data=" << data << "] Cannot send"; throw Exception(error.str()); } } Datagram sockaddr_in); char *buffer = (char*)malloc(sizeof(char) * MAX_BUFFER); struct sockaddr_in address; Datagram void) { try { Socket::UDP sock; sock.bind(3000); sock.send("127.0.0.1", 2000, "request"); Socket::Datagram

    5.7K10编辑于 2022-10-04
  • 来自专栏C/C++基础

    Linux 命令(202)—— traceroute 命令

    )收到这个 datagram 时,它将 TTL 减 1。 此时,TTL 变为 0 了,所以该路由器会将此 datagram 丢掉,并送回一个「ICMP time exceeded」消息(包括发IP包的源地址,IP包的所有内容及路由器的IP地址),traceroute 收到这个消息后,便知道这个路由器存在于这个路径上,接着 traceroute 再送出另一个 TTL 是 2 的datagram,发现第 2 个路由器… traceroute 每次将送出的datagram 的TTL 加1来发现另一个路由器,这个重复的动作一直持续到某个datagram 抵达目的地。 当datagram到达目的地后,该主机并不会送回 ICMP time exceeded 消息,因为它已是目的地了,那么 traceroute 如何得知目的地到达了呢?

    1.1K20编辑于 2022-11-29
  • 来自专栏全栈程序员必看

    traceroute命令讲解

    首先,traceroute送出一个TTL是1的IP datagram(其实,每次送出的为3个40字节的包,包括源地址,目的地址和包发出的时间标签)到目的地,当路径上的第一个路由器(router)收到这个 datagram时,它将TTL减1。 ,便知道这个路由器存在于这个路径上,接着traceroute 再送出另一个TTL是2 的datagram,发现第2 个路由器…… traceroute 每次将送出的datagram的TTL 加1来发现另一个路由器 ,这个重复的动作一直持续到某个datagram 抵达目的地。 当datagram到达目的地后,该主机并不会送回ICMP time exceeded消息,因为它已是目的地了,那么traceroute如何得知目的地到达了呢?

    1.7K10编辑于 2022-07-02
领券