本文介绍: recvform(多了两个参数) == recv + accept。sendto(多了两个参数) == send + connect。3. tcp 数据有边界 , udp数据无边界。5.tcp安全 稳定 可靠 udp不安全。6. tcp相对慢很多,udp传输速度快。7.tcp有中心(服务器) udp没有。4. tcp数据有序, udp数据无序。1.tcp有连接 udp没有连接。2.tcp数据流, udp数据报文。2.构建服务器协议地址簇。安全: 相对不容易被窃取。
UDP编程模型
服务端
#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失败:%mn"),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("绑定失败:%mn"),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;//添加''
printf("客户端%s发来的数据>>%sn",
inet_ntoa(cAddr.sin_addr),buff);
sendto(serverFd,"妖怪,吃俺老孙一棒",
strlen("妖怪,吃俺老孙一棒"),0,
(struct sockaddr*)&cAddr,sizeof cAddr);
}
}
}
客户端
1.创建socket
2.获取服务器协议地址簇
3,通信
recvform(多了两个参数) == recv + accept
#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失败:%mn"),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:%dn",r);
r = recvfrom(serverFd,temp,255,0,
(struct sockaddr*)&addr,&len);
if(r > 0){
temp[r] = 0;
printf("服务器说:%sn",temp);
}
}
}
tcp与udp的区别
1.tcp有连接 udp没有连接
2.tcp数据流, udp数据报文
3. tcp 数据有边界 , udp数据无边界
4. tcp数据有序, udp数据无序
5.tcp安全 稳定 可靠 udp不安全
安全: 相对不容易被窃取
稳定:传输速率变化
可靠:是否一定能收到
6. tcp相对慢很多,udp传输速度快
7.tcp有中心(服务器) udp没有
原文地址:https://blog.csdn.net/m0_74228185/article/details/134562562
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.7code.cn/show_16753.html
如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱:suwngjj01@126.com进行投诉反馈,一经查实,立即删除!
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。