随笔分类 -  网络编程

目录的操作
摘要:一、目录的访问 功能说明:打开一个目录 原型:DIR* opendir(char *pathname); 返回值:打开成功,返回一个目录指针打开失败,则返回NULL 功能说明:访问指定目录中下一个连接的细节 原型:struct dirent* readdir(DIR *dirptr); 返回值:返回 阅读全文

posted @ 2018-02-27 09:35 AlanTu 阅读(148) 评论(0) 推荐(0) 编辑

文件的读取写入
摘要:一、read系统调用 一旦有了与一个打开文件描述相关连的文件描述符,只要该文件是用O_RDONLY或O_RDWR标志打开的,就可以用read()系统调用从该文件中读取字节 函数原型: ssize_t read(int fd, void *buf, size_t count); 参数: fd :想要读 阅读全文

posted @ 2018-02-27 09:32 AlanTu 阅读(437) 评论(0) 推荐(0) 编辑

文件的打开关闭
摘要:一、文件描述符 对于Linux而言,所有对设备或文件的操作都是通过文件描述符进行的。当打开或者创建一个文件的时候,内核向进程返回一个文件描述符(非负整数)。后续对文件的操作只需通过该文件描述符,内核记录有关这个打开文件的信息(file结构体)。 一个进程启动时,默认打开了3个文件,标准输入、标准输出 阅读全文

posted @ 2018-02-27 09:30 AlanTu 阅读(521) 评论(0) 推荐(0) 编辑

浅谈原始套接字 SOCK_RAW 的内幕及其应用(port scan, packet sniffer, syn flood, icmp flood)
摘要:一、SOCK_RAW 内幕 首先在讲SOCK_RAW 之前,先来看创建socket 的函数: int socket(int domain, int type, int protocol); domain :指定通信协议族(protocol family/address) /usr/include/i 阅读全文

posted @ 2018-02-27 09:28 AlanTu 阅读(1781) 评论(0) 推荐(0) 编辑

socket 请求接收完整的一个http响应(设置recv 接收超时选项SO_RCVTIMEO)
摘要:在前面的系列网络编程文章中,我们都是使用socket 自己实现客户端和服务器端来互相发数据测试,现在尝试使用socket 客户端发 送http 请求给某个网站,然后接收网站的响应数据。http 协议参考 这里。 代码如下: C++ Code 1 2 3 4 5 6 7 8 9 10 11 12 13 阅读全文

posted @ 2018-02-27 09:22 AlanTu 阅读(3077) 评论(0) 推荐(0) 编辑

posix 条件变量与互斥锁 示例生产者--消费者问题
摘要:一、posix 条件变量 一种线程间同步的情形:线程A需要等某个条件成立才能继续往下执行,现在这个条件不成立,线程A就阻塞等待,而线程B在执行过程中使这个条件成立了,就唤醒线程A继续执行。 在pthread库中通过条件变量(Condition Variable)来阻塞等待一个条件,或者唤醒等待这个条 阅读全文

posted @ 2018-02-27 09:19 AlanTu 阅读(406) 评论(0) 推荐(0) 编辑

posix 匿名信号量与互斥锁 示例生产者--消费者问题
摘要:一、posix 信号量 信号量的概念参见这里。前面也讲过system v 信号量,现在来说说posix 信号量。 system v 信号量只能用于进程间同步,而posix 信号量除了可以进程间同步,还可以线程间同步。system v 信号量每次PV操作可以是N,但Posix 信号量每次PV只能是1。 阅读全文

posted @ 2018-02-27 09:17 AlanTu 阅读(987) 评论(0) 推荐(0) 编辑

线程的属性和 线程特定数据 Thread-specific Data
摘要:一、posix 线程属性 POSIX 线程库定义了线程属性对象 pthread_attr_t ,它封装了线程的创建者可以访问和修改的线程属性。主要包括如下属性: 1. 作用域(scope) 2. 栈尺寸(stack size) 3. 栈地址(stack address) 4. 优先级(priorit 阅读全文

posted @ 2018-02-27 09:14 AlanTu 阅读(775) 评论(0) 推荐(0) 编辑

线程模型、pthread 系列函数 和 简单多线程服务器端程序
摘要:一、线程有3种模型,分别是N:1用户线程模型,1:1核心线程模型和N:M混合线程模型,posix thread属于1:1模型。 (一)、N:1用户线程模型 “线程实现”建立在“进程控制”机制之上,由用户空间的程序库来管理。OS内核完全不知道线程信息。这些线程称为用户空间线程。这些线程都工作在“进 程 阅读全文

posted @ 2018-02-27 09:12 AlanTu 阅读(1638) 评论(0) 推荐(0) 编辑

通过UNIX域套接字传递描述符和 sendmsg/recvmsg 函数
摘要:在前面我们介绍了UNIX域套接字编程,更重要的一点是UNIX域套接字可以在同一台主机上各进程之间传递文件描述符。 下面先来看两个函数: #include <sys/types.h> #include <sys/socket.h> ssize_t sendmsg(int sockfd, const s 阅读全文

posted @ 2018-02-26 14:25 AlanTu 阅读(1336) 评论(0) 推荐(0) 编辑

UNIX域套接字编程和socketpair 函数
摘要:一、UNIX Domain Socket IPC socket API原本是为网络通讯设计的,但后来在socket的框架上发展出一种IPC机制,就是UNIX Domain Socket。虽然网络socket也可用于同一台主机的进程间通讯(通过loopback地址127.0.0.1),但是UNIX D 阅读全文

posted @ 2018-02-26 14:23 AlanTu 阅读(3262) 评论(0) 推荐(1) 编辑

基于UDP协议的网络程序
摘要:一、下图是典型的UDP客户端/服务器通讯过程 下面依照通信流程,我们来实现一个UDP回射客户/服务器 #include <sys/types.h> #include <sys/socket.h> ssize_t send(int sockfd, const void *buf, size_t len 阅读全文

posted @ 2018-02-26 14:21 AlanTu 阅读(2393) 评论(0) 推荐(0) 编辑

epoll 系列函数简介、与select、poll 的区别
摘要:一、epoll 系列函数简介 #include <sys/epoll.h> int epoll_create(int size); int epoll_create1(int flags); int epoll_ctl(int epfd, int op, int fd, struct epoll_e 阅读全文

posted @ 2018-02-26 14:20 AlanTu 阅读(2691) 评论(0) 推荐(0) 编辑

select函数的并发限制和 poll 函数应用举例
摘要:一、用select实现的并发服务器,能达到的并发数,受两方面限制 1、一个进程能打开的最大文件描述符限制。这可以通过调整内核参数。可以通过ulimit -n来调整或者使用setrlimit函数设置, 但一个系统所能打开的最大数也是有限的,跟内存大小有关,可以通过cat /proc/sys/fs/fi 阅读全文

posted @ 2018-02-26 14:18 AlanTu 阅读(689) 评论(0) 推荐(0) 编辑

套接字I/O超时设置方法和用select实现超时
摘要:注:如无特殊说明,sockfd 原始状态都是阻塞的。 一、使用alarm 函数设置超时 C++ Code 1 2 3 4 5 6 7 8 9 10 11 12 13 void handler(int sig) { } signal(SIGALRM, handler); alarm(5); int r 阅读全文

posted @ 2018-02-26 14:16 AlanTu 阅读(1011) 评论(0) 推荐(0) 编辑

shutdown 与 close 函数 的区别
摘要:假设server和client 已经建立了连接,server调用了close, 发送FIN 段给client(其实不一定会发送FIN段,后面再说),此时server不能再通过socket发送和接收数据,此时client调用read,如果接收到FIN 段会返回0,但client此时还是可以write 阅读全文

posted @ 2018-02-26 14:13 AlanTu 阅读(288) 评论(0) 推荐(0) 编辑

使用select函数改进客户端/服务器端程序
摘要:一、当我们使用单进程单连接且使用readline修改后的客户端程序,去连接使用readline修改后的服务器端程序,会出现一个有趣的现象,先来看输出: 先运行服务器端,再运行客户端, simba@ubuntu:~/Documents/code/linux_programming/UNP/socket 阅读全文

posted @ 2018-02-26 14:11 AlanTu 阅读(1489) 评论(0) 推荐(0) 编辑

五种I/O模型和select函数简介
摘要:一、五种I/O模型 1、阻塞I/O 我们在前面所说的I/O模型都是阻塞I/O,即调用recv系统调用,如果没有数据则阻塞等待,当数据到来则将数据从内核空间(套接口缓冲区)拷贝到用户空间(recv函数提供的buf),然后recv返回,进行数据处理。 2、非阻塞I/O 我们可以使用 fcntl(fd, 阅读全文

posted @ 2018-02-26 14:08 AlanTu 阅读(920) 评论(0) 推荐(0) 编辑

一个进程发起多个连接和gethostbyname等函数
摘要:一、在前面讲过的最简单的回射客户/服务器程序中,一个客户端即一个进程,只会发起一个连接,只要稍微修改一下就可以让一个客户端发起多个连 接,然后只利用其中一个连接发送数据。 先来认识一个函数getsockname #include <sys/socket.h> int getsockname(int 阅读全文

posted @ 2018-02-26 14:05 AlanTu 阅读(604) 评论(0) 推荐(0) 编辑

利用recv和readn函数实现readline函数
摘要:在前面的文章中,我们为了避免粘包问题,实现了一个readn函数读取固定字节的数据。如果应用层协议的各字段长度固定,用readn来读是非常方便 的。例如设计一种客户端上传文件的协议,规定前12字节表示文件名,超过12字节的文件名截断,不足12字节的文件名用'\0'补齐,从第13字节开始是 文件内容,上 阅读全文

posted @ 2018-02-26 14:03 AlanTu 阅读(974) 评论(1) 推荐(2) 编辑

导航