TCP与UDP
UDP头:
包括源端口、目的地端口、用户数据包长度,检验和 数据。
typedef struct _UDP_HEADER
{
unsigned short m_usSourPort; // 源端口号16bit
unsigned short m_usDestPort; // 目的端口号16bit
unsigned short m_usLength; // 数据包长度16bit
unsigned short m_usCheckSum; // 校验和16bit
}__attribute__((packed))UDP_HEADER, *PUDP_HEADER;
IP头:
UDP与TCP的区别
TCP | UDP |
有链接 | 无链接 |
可靠传输(使用流量控制和拥塞控制) | 不可靠传输(不使用流量控制和用三个控制) |
只能一对一 | 一对一,一对多或者多对多 |
面向字节流 | 面向报文 |
首部大小20~60字节 | 首部大小8字节 |
SOCK_UDP
服务端代码:
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <sys/types.h> /* See NOTES */
#include <sys/socket.h>
#include <netinet/in.h>
#include <netinet/ip.h>
#include <arpa/inet.h>
#include <time.h>
typedef struct sockaddr * (SA);
int main(int argc, char *argv[])
{
int sockfd = socket(AF_INET,SOCK_DGRAM,0);
if(-1 == sockfd)
{
perror("socket");
exit(1);
}
// man 7 ip
struct sockaddr_in ser,cli;
bzero(&ser,sizeof(ser));
bzero(&cli,sizeof(cli));
ser.sin_family = AF_INET;
// 大小端转化 host to net short
ser.sin_port = htons(50000);
ser.sin_addr.s_addr = inet_addr("192.16