UDP(用户数据报协议)和套接字编程
来源:互联网 发布:adobe dw cc 2017 mac 编辑:程序博客网 时间:2024/05/16 08:05
- 源端口:发送方的端口号(需要对方回信是选用,不用时可全为0)
- 目的端口:终点交付报文时使用(把报文交给谁)
- UDP长度:UDP用户数据报的长度,最小值8(仅有首部)
- 校验和:检测UDP用户数据报在传输中是否有错
UDP
特点
- 无连接的
- 尽最大努力交付,即不保证可靠交付
- 面向报文的
- 没有拥塞控制
- 支持一对一、一对多、多对多的交互通信
- 首部开销小,只有8个字节
UDP套接字(不需要监听和连接)
//server#include<stdio.h>#include<sys/types.h>#include<sys/socket.h>#include<string.h>#include<netinet/in.h>#include<arpa/inet.h>#include<stdlib.h>void usage(const char* proc){ printf("usage:%s [local_ip] [local_port]\n",proc);}int main(int argc,char*argv[]){ if(argc != 3) { usage(argv[0]); return 1; } int sk = socket(AF_INET,SOCK_DGRAM,0); if(sk < 0) { perror("socket"); return 2; } struct sockaddr_in local; local.sin_family = PF_INET; local.sin_port = htons(atoi(argv[2])); local.sin_addr.s_addr =inet_addr(argv[1]); if(bind(sk,(struct sockaddr*)&local,sizeof(local))<0) { perror("bind"); return 3; } while(1) { char buf[1024]; struct sockaddr_in client; socklen_t len = sizeof(client); ssize_t s = recvfrom(sk,buf,sizeof(buf)-1,0,(struct sockaddr*)&client,&len); if(s > 0) { buf[s] = 0; printf("client# %s\n",buf); sendto(sk,buf,strlen(buf),0,(struct sockaddr*)&client,len); } else { close(sk); printf("client quit...\n"); break; } } return 0;}
//client#include<stdio.h>#include<sys/types.h>#include<sys/socket.h>#include<string.h>#include<netinet/in.h>#include<arpa/inet.h>#include<stdlib.h>void usage(const char* proc){ printf("usage:%s [local_ip] [local_port]\n",proc);}int main(int argc,char*argv[]){ if(argc != 3) { usage(argv[0]); return 1; } int sk = socket(AF_INET,SOCK_DGRAM,0); if(sk < 0) { perror("socket"); return 2; } char buf[1024]; struct sockaddr_in server; server.sin_family = PF_INET; server.sin_port = htons(atoi(argv[2])); server.sin_addr.s_addr = inet_addr(argv[1]); socklen_t len = sizeof(server); while(1) { printf("Please Enter#:"); fflush(stdout); ssize_t s = read(0,buf,sizeof(buf)-1); if(s > 0) { buf[s-1] = 0; sendto(sk,buf,sizeof(buf)-1,0,(struct sockaddr*)&server,len); s = recvfrom(sk,buf,sizeof(buf)-1,0,(struct sockaddr*)&server,&len); if(s>0) { buf[s] = 0; printf("server echo#: %s\n",buf); } } }}
//makefile.PHONY:allall:udp_server udp_clientudp_client:udp_client.c gcc -o $@ $^udp_server:udp_server.c gcc -o $@ $^ .PHONY:cleanclean: rm -f udp_server udp_client
阅读全文
0 0
- UDP(用户数据报协议)和套接字编程
- UDP用户数据报协议
- UDP 用户数据报协议
- UDP:用户数据报协议
- UDP:用户数据报协议
- UDP -- 用户数据报协议
- 用户数据报协议 UDP
- UDP用户数据报协议
- UDP:用户数据报协议
- 用户数据报协议UDP
- 用户数据报协议UDP
- 用户数据报协议UDP
- UDP:用户数据报协议
- 用户数据报协议UDP
- 数据报(UDP)套接字客户端/服务器编程
- UDP用户数据报协议和IP分组
- Windows套接字编程:基于TCP和UDP协议
- Windows套接字编程:基于TCP和UDP协议
- LVS负载均衡之持久性连接介绍(session篇)
- 使用GlideUrl无法加载网络图片
- 微信小程序开发MAP(地图)
- CentOS 7 安装python3.6.1
- IntelliJ IDEA 快捷键和设置
- UDP(用户数据报协议)和套接字编程
- Java NIO浅析
- 6月22日云栖精选夜读:业界首个非侵入式热修复方案Sophix重磅推出_颠覆移动端传统更新流程!
- R6 STM32 I2C—读写EEPROM
- SpringMVC专题——SpringMVC的流程(个人理解)
- studio关联svn
- java中Keytool的使用总结
- 关于样本溯源相关
- 802.11协议——初探