linux网络编程之UDP编程

linux网络编程之UDP编程

UDP编程模型

服务端

1.创建socket

2.构建服务器协议地址簇

3.绑定

  1. 通信

sendto(多了两个参数) == send + connect

c 复制代码
#include <stdio.h>
#include <sys/types.h>          /* See NOTES */
#include <sys/socket.h>
#include <netinet/in.h>
#include <unistd.h>
#include <string.h>
#include <stdlib.h>
#include <signal.h>
#include <arpa/inet.h>

int main(){
	//1. 创建socket 		
	int serverFd = socket(AF_INET,SOCK_DGRAM,0);
	if(-1  ==  serverFd) printf("创建socket失败:%m\n"),exit(-1);
	printf("创建socket成功!\n");				
	//2. 构建服务器协议地址族	
	struct sockaddr_in  addr = {0};
	addr.sin_family =   AF_INET;//和socket函数第一个参数一致
	addr.sin_addr.s_addr = inet_addr("192.168.249.135");//把字符串转成整型
	addr.sin_port = htons(9999);//端口号			
	//3. 绑定
	int r = bind(serverFd,(struct sockaddr*)&addr,sizeof addr);
	if(-1  ==  r) printf("绑定失败:%m\n"),close(serverFd),exit(-1);
	printf("绑定成功!\n");	
	//4. 通信
	char buff[256];

	//用来存储客户端协议地址族
	struct sockaddr_in  cAddr = {0};
	int cLen = sizeof cAddr;
	while(1){
		r = recvfrom(serverFd,buff,255,0,
		(struct sockaddr*)&cAddr,&cLen);//和read一样
		if(r>0){
			buff[r] = 0;//添加'\0'
			printf("客户端%s发来的数据>>%s\n",
				inet_ntoa(cAddr.sin_addr),buff);

			sendto(serverFd,"妖怪,吃俺老孙一棒",
				strlen("妖怪,吃俺老孙一棒"),0,
				(struct sockaddr*)&cAddr,sizeof cAddr);
		}
	}

}

客户端

1.创建socket

2.获取服务器协议地址簇

3,通信

recvform(多了两个参数) == recv + accept

c 复制代码
#include <stdio.h>
#include <sys/types.h>          /* See NOTES */
#include <sys/socket.h>
#include <netinet/in.h>
#include <unistd.h>
#include <string.h>
#include <stdlib.h>
#include <signal.h>
#include <arpa/inet.h>

int main(){
	//1. 创建socket 		
	int serverFd = socket(AF_INET,SOCK_DGRAM,0);
	if(-1  ==  serverFd) printf("创建socket失败:%m\n"),exit(-1);
	printf("创建socket成功!\n");				
	//2. 构建服务器协议地址族	
	struct sockaddr_in  addr = {0};
	addr.sin_family =   AF_INET;//和socket函数第一个参数一致
	addr.sin_addr.s_addr = inet_addr("192.168.249.135");//把字符串转成整型
	addr.sin_port = htons(9999);//端口号			
	//3. 通信
	char buff[256];
	int r;
	char temp[256];
	int len = sizeof addr;
	while(1){
		memset(buff,0,256);
		printf("请输入>>");
		scanf("%s",buff);
		r = sendto(serverFd,buff,strlen(buff),0,
			(struct sockaddr*)&addr,sizeof addr);
		printf("r:%d\n",r);

		r = recvfrom(serverFd,temp,255,0,
			(struct sockaddr*)&addr,&len);
		if(r > 0){
			temp[r] = 0;
			printf("服务器说:%s\n",temp);
		}
	}



}

tcp与udp的区别

1.tcp有连接 udp没有连接

2.tcp数据流, udp数据报文

  1. tcp 数据有边界 , udp数据无边界

  2. tcp数据有序, udp数据无序

5.tcp安全 稳定 可靠 udp不安全

安全: 相对不容易被窃取

稳定:传输速率变化

可靠:是否一定能收到

  1. tcp相对慢很多,udp传输速度快

7.tcp有中心(服务器) udp没有

相关推荐
前端技术几秒前
03_网络层与IP编址:理解网络寻址的核心逻辑
服务器·网络·php
王大傻092818 分钟前
WASC 团队报告的安全威胁分类
网络·安全·web安全
Championship.23.2422 分钟前
Linux Top 命令族深度解析与实战指南
java·linux·服务器·top·linux调试
song1502653729838 分钟前
本安型LCFB-12矿用护套连接器介绍
网络
南城猿40 分钟前
保姆级 Ubuntu 部署 禅道
linux·运维·ubuntu
JS_SWKJ1 小时前
光闸赋能数安防护
网络
zhangrelay1 小时前
三分钟云课实践速通--模拟电子技术-模电--SimulIDE
linux·笔记·学习·ubuntu·lubuntu
木木_王1 小时前
嵌入式Linux学习 | 数据结构 (Day05) 栈与队列详解(原理 + C 语言实现 + 实战实验 + 易错点剖析)
linux·c语言·开发语言·数据结构·笔记·学习
雨浓YN1 小时前
GKMLT通讯工具箱(WPF MVVM) - 07-倍福ADS通讯
网络·wpf
Ether IC Verifier1 小时前
OSI网络七层协议详细介绍
服务器·网络·网络协议·计算机网络·php·dpu