欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 科技 > 能源 > UDP编程

UDP编程

2025/2/6 11:37:21 来源:https://blog.csdn.net/2403_83711988/article/details/145405998  浏览:    关键词:UDP编程

TCP的API补充:
1.send()函数

ssize_t send(int sockfd, 
const void *buf, 
size_t len, 
int flags
);
。参数:
■ sockfd:socket函数返回的fd
■ buffer:发送缓冲区首地址
I
■ length:发送的字节
■ flags:发送方式(通常为0),作用和write一样
■ MSG_DONTWAIT,非阻塞
■ MSG_OOB:用于TCP类型的带外数据(out of band)
返回值:
。 成功:实际发送的字节数
。 失败:-1,并设置errno

网络中接收数据:

2.recv()/read()
• int recv( SOCKET s, char FAR *buf, int len, int flags);
o flag:一般填0,和read作用一样
。 特殊的标志:
■ MSG_DONTWAIT
■ MSG_OOB:读取带外数据
■ MSG_PEEK:流

bind:绑定服务器:TCP地址和端口号
receivefrom():阻塞等待客户端数据
sendto():指定服务器的IP地址和端口号,要发送的数据

无连接尽力传输,UDP:是不可靠传输
实时的音视频传输,DNS域名解析包

#include <stdto.hs
#include <stdltb.h>
#include <unistd.h>
#include <string.h>
#include <strings.har
#include<sys/types.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#define SERV_PORT 5001
#define SERV_IP_ADDR192.168.182.144”
#define BUFSIZE 1024
#define QUIT_STR "QUIT"
int main()
{int fd = -1;struct sockaddr_in sin;//1.socketfd = socket(AF_INET, SOCK_DGRAM, 0);if(fd <0){perror("socket");exit(1);}int b_reuser=1;//2.addrsetsockopt(fd, SOL_SOCKET, SO_REUSEADDR, &b_ reuser, sizeof(int));//bindbzero(&sin, sizeof(sin));sin.sin_family = AF_INET;sin.sin port = htons(SERV_PORT);sin.sin addr.s_addr = htonl(INADDR_ANY);if(bind(fd, (struct sockaddr*)&sin, sizeof(sin)) <6){perror("bind");exit(1);}char buf[BUFSIZE];struct sockaddr_in cin;socklen_t addrlen = sizeof(cin);while(1){bzero(buf, BUFSIZE);if(recvfrom(fd.buf, BUFSIZE-1, 0, (struct sockaddr*)&cin, &addrlen)<0){	perror("recvfrom");continue;}char ipv4_addr[16];if(!inet_ntop(AF_INET, (vold *)&cin.sin_addr, tpv4_addr, sizeof(cin))){perror("inet_ntop");exit(1);}printf("receive from(%s, %d), data:%s\n", tpv4_addr, ntohs(cin.sin_port), buf);if(!strncasecmp(buf, QUIT_STR, strlen(QUIT_STR))){printf(cltent(%s:%d)is exiting!\n", ipv4_addr,ntohs(cin.sin_port));}}	close(fd);return 0;
}

UDP客户端

#include <stdto.h>
#include<stdlib.h>
#include <unistd.h>
#include <string.h>
#include <strings.h>
#include<sys/types.h>
#include<sys/socket.h>
#include <arpa/inet.h>
#define SERV_PORT 5001
#define SERV IP_ADDR "192.168.182.144"
#define QUIT_STR"QUIT"
#define BUFSIZE 1024
int main(int argc,char**argv)
{if(argc != 3){exit(1);}int fd =-1;fd = socket(AF_INET, SOCK_ DGRAM, 0);if(fd <0){	perror("socket");exit(1);}int port = -1;	port = atoi(argv[2]);struct sockaddr_in sin;bzero(&sin, sizeof(sin));sin.sin family = AF INET;sin.sin_port = htons(port);sin.sin_addr.s_addr= inet_addr(argv[1]);char buf[BUFSIZE];while(1){if(fgets(buf, BUFSIZE-1, stdin) == NULL){perror("fgets");continue;}sendto(fd, buf, strlen(buf), 0, (struct sockaddr*)&sin, sizeof(sin));if(!strncasecmp(buf, QUIT_STR, strlen(QUIT_STR))){printf("client is extted!\n");break;}}close(fd);return 0;
}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com