Linux-网络编程-UDP网络编程(day13续2)
?一、基于TCP的网络编程(续day12) 二、并发服务器 三、基于UDP的网络编程 ? 三、基于UDP的网络编程 ? ? ? 1、基于UDP网络编程基础 (1)报头格式 ? ? ? 头部为8个字节 (2)编程模型 或者 ?(3)相关函数 ? sendto(2) #include<sys/types.h> #include<sys/socket.h> int sendto (int sockfd,const void *buf,size_t len,? int flags,const struct sockaddr *dest_addr,socklen_t addrlen); 功能: 在socket上发送一个消息 参数: sockfd:socket(2)的返回值 buf:指定了消息的存放地址 len:指定发送消息的长度 flags:一般为0 dest_addr:目标地址 addrlen:目标地址长度 返回值: 成功:发送的字节数 错误:-1,errno被设置 ? ? recvfrom(2) #include<sys/types.h> #include<sys/socket.h> ? ssize_t recvfrom(int sockfd,void *buf,int flags,struct sockaddr *src_addr,socklen_t *addrlen); 功能: 从socket接收消息 参数: sockfd:socket(2)的返回值 buf:指定接收消息的空间 len:接收消息的长度 flags:一般为0 src_addr:保存发送方的地址,如果被指定为NULL,那么addrlen也被是空 addrlen:值-结果参数,src_addr地址空间的长度 返回值: 成功:接收到的字节数 错误:-1 发送方正常关闭:0 2、基于UDP的客户端编程 ?(1)创建通讯描述符 socket(AF_INET,SOCK_DGRAM,0); (2)使用通讯描述符向服务器发送数据 sendto(2) (3)等待服务器响应 recvfrom(2) (4)关闭通讯描述符 close(s_fd); 3、基于UDP的服务器编程 (1)创建通讯描述符 socket(AF_INET,0); (2)将通讯描述符和服务器的地址空间绑定 bind(s_fd,(struct sockaddr *)&server,sizeof(server)); (3)recvfrom等待客户端数据的到来 recvfrom(2) (4)处理客户端数据 (5)回应客户端消息 ... ? 服务器代码 ? 作业: 客户端给服务器发送一个文件名字。服务器收到文件名字之后,在指定的路径之下查找文件是否存在,如果不存在,服务器给客户端发送404,客户端收到404则提示找不到此文件;如果此文件存在,则向客户端发送200,客户端收到200之后,创建这个文件,然后将这个文件的内容下载到客户端中。 1、前言 工作中涉及到文件系统,有时候需要判断文件和目录是否存在。我结合APUE第四章文件和目录,总结一下如何正确判断文件和目录是否存在,方便以后查询。 2、stat系列函数 stat函数用来返回与文件有关的结构信息。stat系列函数有三种情况,分别对应文件名称、文件描述符和符号链接文件。stat结构描述了文件的属性,主要包括文件的类型、文件大小等等。详细stat结构如下所示: 我们可以通过stat获取文件的类型和文件大小等信息。文件类型有:普通文件、目录文件、块特殊文件、字符特殊文件、FIFO、套接字和符号链接。要想通过stat系列函数来判断文件或者目录是否存在,当执行stat函数,如果文件存在时,还需进一步判断该文件是普通文件还是目录文件。 stat系列函数错误返回-1,错误码存在errno中,errno取值如下:
3、access函数 access函数按照实际用户ID和实际组进行访问权限测试。函数原型为: #include <unistd.h> int access(const char *pathname,int mode); ? ? mode取值: F_OK?? 测试文件是否存在 R_OK? 测试读权限 W_OK 测试写权限 X_OK 测试执行权限 正确判断一个文件是否存在是用access函数,实现如下所示: ? 4、oepndir函数 opendir函数用来打开文件目录,成功返回指针,出错返回NULL。实现如下: ?(文件查找部分来自编程之家) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |