udp socket传输有延时吗
有的, 一般是根据路由器的转发次数估测时延。北京到华盛顿和北京到上海,时延差距很大,这是因为转发次数太多的缘故。
任何传输都是有网络上的时间消耗的。。 内核处理,调度消耗的时间。路上消耗的时间:距离/光速。内网的延迟大约 1ms 距离时间要看网络环境

udp socket 关于在一个程序里实现发送和接收
发送程序Sender.cpp: #include#include#include#includeusing namespace std;//创建新的套接字之前需要调用一个引入Ws2_32.dll库的函数,否则服务器和客户端连接不上#pragma comment(lib,"ws2_32.lib")struct test {string str;};struct UdpHeartPack {char UDPData[16] ;};int main(int argc, char* argv[]){struct UdpHeartPack udpPack;static int UDP_PORT = 7001;udpPack.UDPData[0] = 'h';udpPack.UDPData[1] = 'e';udpPack.UDPData[2] = 'l';udpPack.UDPData[3] = 'l';udpPack.UDPData[4] = 'o';udpPack.UDPData[5] = ' ';udpPack.UDPData[6] = 'w';udpPack.UDPData[7] = 'o';udpPack.UDPData[8] = 'r';udpPack.UDPData[9] = 'l';udpPack.UDPData[10] = 'd';udpPack.UDPData[11] = ' ';char *pPack = (char *) &udpPackWSADATA wsaData;//指向WinSocket信息结构的指针SOCKET sockListener;//创建套接字SOCKADDR_IN saUdpServ;//指向通信对象的结构体指针BOOL fBroadcast = TRUE; //用于setsockopt(),表示允许char sendBuff[800]; //缓冲区存放发送的数据int ncount=0; //用于显示消息数目//*************************** 第一步初始化Winsock *****************************//if(WSAStartup(MAKEWORD( 1, 1 ), &wsaData )!=0) //进行WinSocket的初始化{printf("Can't initiates windows socket!Program stop.n");//初始化失败返回-1return -1;}//******************** 第二步建立一个数据报类型的UDP套接字******************//sockListener=socket(PF_INET,SOCK_DGRAM,0);// setsockopt函数用于设置套接口选项// 采用广播形式须将第三个参数设置为SO_BROADCASTsetsockopt ( sockListener,SOL_SOCKET,SO_BROADCAST, (CHAR *)&fBroadcast, sizeof (BOOL) );//参数设置,注意要将IP地址设为INADDR_BROADCAST,表示发送广播UDP数据报saUdpServ.sin_family = AF_INET;saUdpServ.sin_addr.s_addr = htonl ( INADDR_BROADCAST );saUdpServ.sin_port = htons (UDP_PORT); //发送用的端口,可以根据需要更改while(1) //循环发送数据{Sleep(1000);sprintf(sendBuff,"Message %d is: ok",ncount++);//将ncount的值放入字符串senBuff中//**********************第三步使用sendto函数进行通信*************************//sendto ( sockListener,/*sendBuff*/pPack, lstrlen (sendBuff)/*sizeof(udpPack)*/, 0, (SOCKADDR *) &saUdpServ, sizeof (SOCKADDR_IN));printf("%sn",sendBuff);//将要广播的数据串输出}//********************* 第四步关闭socket***************************************//closesocket(sockListener); //关闭监听socketWSACleanup();return 0;}const static intBUFFER_LENGTH = 12;接收端程序Receiver.cpp:#include#include#include//创建新的套接字之前需要调用一个引入Ws2_32.dll库的函数,否则服务器和客户端连接不上#pragma comment(lib,"ws2_32.lib")int main(int argc, char* argv[]){WSADATA wsaData; //指向WinSocket信息结构的指针SOCKET sockListener;SOCKADDR_IN sin,saClient;//设置两个地址,sin用来绑定//saClient用来从广播地址接收消息char cRecvBuff[800]; //定义接收缓冲区int nSize,nbSize;int iAddrLen=sizeof(saClient);if(WSAStartup(MAKEWORD( 1, 1 ), &wsaData )!=0) //进行WinSocket的初始化{printf("Can't initiates windows socket!Program stop.n");//初始化失败返回-1return -1;}sockListener=socket(AF_INET, SOCK_DGRAM,0);sin.sin_family = AF_INET;sin.sin_port = htons(7001); //发送端使用的发送端口,可以根据需要更改sin.sin_addr.s_addr = htonl(INADDR_ANY);if(bind( sockListener, (SOCKADDR FAR *)&sin, sizeof(sin))!=0){printf("Can't bind socket to local port!Program stop.n");//初始化失败返回-1return -1;}while(1){nSize = sizeof ( SOCKADDR_IN );if((nbSize=recvfrom (sockListener,cRecvBuff,800,0,(SOCKADDR FAR *) &saClient,&nSize))==SOCKET_ERROR) //若接收失败则提示错误{printf("Recive Error");break;}cRecvBuff[nbSize] = ' ';//字符串终止printf("%sn",cRecvBuff);//显示所接收到的字符串}return 0; }

udp Socket 发送缓冲区 最大可以为多大
发送缓冲区可以很大,但是在真正发送数据时需要分片发送。分片发送需要满足以下条件: 1、给每个udp包加上序号。2、校验字节每个udp包的最大大小是多少?65507 约等于 64K为什么最大是65507?因为udp包头有2个byte用于记录包体长度. 2个byte可表示最大值为: 2^16-1=64K-1=65535udp包头占8字节, ip包头占20字节, 65535-28 = 65507如果要发送的udp报文大于65507怎么办? 需要在应用层由开发者自己分片发送. 分片的粒度最大65507字节. 系统的sendto函数是不支持大于65507字节的单包发送的.

socket是tcp还是udp
SOCKET是API,TCP/UPD是通信协议,两个不是一个概念
都可以 socket是网络套接字 它可以使用tcp和udp两种传输协议
tcp/ip 网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个socket。 建立网络通信连接至少要一对端口号(socket)。socket本质是编程接口(API),对TCP/IP的封装,TCP/IP也要提供可供程序员做网络开发所用的接口,这就是Socket编程接口;HTTP是轿车,提供了封装或者显示数据的具体形式;Socket是发动机,提供了网络通信的能力。

简述基于TCP和UDP的Socket编程的异同
Socket有两种主要的操作方式:面向连接的和无连接的。无连接的操作使用UDP数据报协议,这个操作不需要连接一个目的的socket,它只是简单地投出数据报,快速高效,但缺少数据安全性。面向连接的操作使用TCP协议,一个这个模式的socket必须在发送数据之前与目的地的socket取得一个连接,一旦连接建立了,socket就可以使用一个流接口:打开-读-写-关闭,所有的发送的信息都会在另一端以同样的顺序被接收,面向连接的操作比无连接的操作效率要低,但数据的安全性更高。基于TCP的socket编程是采用的流式套接字(SOCK_STREAM)。基于UDP采用的数据报套接字(SOCK_DGRAM). 流式套接字的设计是针对面向连接的网络应用,在数据传输之前需要预先建立连接,在数据传输过程中需要维持连接,在数据传输结束后需要释放连接。由于采用校验和、确认与超时等差错控制手段,因此流式套接字可以保证数据传输的正确性。 数据报套接字(SOCK_DGRAM)提供无连接的、不可靠的数据传输服务,实际上它是基于TCP/IP协议族中的UDP协议实现的。数据报套接字提供无序、有差错与有重复的数据流服务。数据报套接字的设计是针对无连接的网络应用,在数据传输之前不需要预先建立连接。由于只采用很有限的差错控制手段,因此数据报套接字无法保证数据传输的正确性。
tcp是面向连接的,网络上的任意计算机,都要连接到服务器才能和其他的计算机交互。 udp是面向无连接的,不需要服务器也可以交互,只要知道对方的ip和监听端口就行。。
tcp是面向连接的,网络上的任意计算机,都要连接到服务器才能和其他的计算机交互。 udp是面向无连接的,不需要服务器也可以交互,只要知道对方的ip和监听端口就行。。 TCP是一种很保险的链接,需要三次握手,所以数据的发送不会丢失,能根据网络的拥塞自动调整发送的时延,,,而UDP是一种不保险的链接,数据发出去后不管对面会不会收到,多用于语音视频通话中。
实现方法 以及API 不同。运用的地方不同。当然主要取决去二者的各自特点。1)TCP是面向连接的传输控制协议,而UDP提供了无连接的数据报服务; (2)TCP具有高可靠性,确保传输数据的正确性,不出现丢失或乱序;UDP在传输数据前不建立连接,不对数据报进行检查与修改,无须等待对方的应答,所以会出现分组丢失、重复、乱序,应用程序需要负责传输可靠性方面的所有工作;(3)也正因为以上特征,UDP具有较好的实时性,工作效率较TCP协议高;(4)UDP段结构比TCP的段结构简单,因此网络开销也小。 具体二种协议没有好坏,只有适合,有时候二者结合,比如QQ就是两种协议都有,比如组播通信的时候只能用udp

本文由 在线网速测试 整理编辑,转载请注明出处。