
网络编程
RGBMarco
时间能证明一切,如果不能帮助到别人,那就记录自己!
展开
-
一个简单的TCP/IP并发回显C/S(一)
解决问题: 1.并发等待子进程终止(避免出现僵死进程) 2.防止accept,read,write等阻塞函数的中断不能重启 未解决问题 1.服务器非正常终止,崩溃,重启客户端代码: vi c2.c#include <stdio.h>#include <stdlib.h>#include <sys/socket.h>#include <unistd.h>#include <strin原创 2017-10-29 20:34:25 · 484 阅读 · 0 评论 -
TCP带外数据
TCP带外数据特点: 1,该数据有两种接收方式: 1.默认方式:通过单独缓冲区接收(不是接受端接受其他数据的缓冲区),当带外数据到达时,内核会向接收套接字宿主进程发送SIGURG信号 2.设置为“带内数据”:通过接收端调用setsockopt打开SO_IOOBNLINE选项就可以将带外数据放进”带内缓冲区“,但也可以通过sockatmark判断”带内缓冲区“的位置(每个TCP...原创 2018-03-16 08:21:26 · 400 阅读 · 0 评论 -
recvmsg和sendmsg的用法
/********************************************************************************** 函数原型: ssize_t recvmsg(int sockfd,struct msghdr* msg,int msg_flags); ssize_t sendmsg(int sockfd,struct msgh...原创 2018-02-23 15:26:08 · 3223 阅读 · 1 评论 -
TCP C/S心搏函数
心搏函数头文件:#ifndef _HEART_H_#define _HEART_H_#include <unistd.h>#include <signal.h>#include <sys/socket.h>#include <string.h>#include <errno.h>#include <stdio.h...原创 2018-03-16 11:28:53 · 497 阅读 · 0 评论 -
ioctl 获取接口信息
1.首先通过SIOCGIFCONF选项,获取所有接口表项(注:无ip地址的接口无法通过SIOCGIFCONF选项获得,需要访问特定文件才能获得,下图会有提示) 2.使用SIOCGIFADDR只能获得ipv4地址,ipv6需要访问特定获得文件(下图有提示) 本人电脑运行的结果也印证上面两点代码:#include <stdlib.h>#include <sys/so...原创 2018-03-04 15:59:33 · 3615 阅读 · 0 评论 -
Unix域套接字的初级应用
Unix字节流套接字的回显服务:服务端代码:#include <stdio.h>#include <stdlib.h>#include <sys/socket.h>#include <sys/un.h>#include <unistd.h>#include <string.h>#include <er...原创 2018-02-25 12:37:14 · 248 阅读 · 0 评论 -
描述符传递
Example.No.1: 通过socketpair打开两个连接起来的Unix套接字,一个用于进程本身读取内容,并输出到进程本身的标准输出,另一个则用于子进程传递通过Unix套接字发送excel的一个进程打开的文件描述符,通过sendmsg的辅助数据传递进程本身代码:#include <stdio.h>#include <stdlib.h>#include &...原创 2018-02-25 13:33:06 · 352 阅读 · 0 评论 -
UDP服务器绑定所有接口
服务端代码:#include <stdio.h>#include <stdlib.h>#include <sys/socket.h>#include <string.h>#include <errno.h>#include <unistd.h>#include <signal.h>#include原创 2018-03-12 13:52:59 · 714 阅读 · 0 评论 -
并发UDP服务器
服务器端代码如果采用fork写时复制(Copy on Write)技术,代码还可以更简洁一点服务端代码:#include <stdio.h>#include <stdlib.h>#include <sys/socket.h>#include <unistd.h>#include <string.h>#include &l...原创 2018-03-12 17:41:46 · 889 阅读 · 0 评论 -
简单的CGI服务器
CGI服务器主要是通过把服务器本地标准输入,输出或者文件重定向到网络连接中,这样我们就能够通过向标准输入,输出缓冲区中发送信息,达到在网络连接中发送信息的效果.,(简单理解。。。。) 这里主要注意点是我们要进行fflush(),通过dup进行重定向 cgi.c#include <sys/socket.h>#include <errno.h>#include &l...原创 2018-05-19 14:57:00 · 2509 阅读 · 0 评论 -
SCTP并发服务器
注:一定要通过setsockopt函数开启sctp_io_data_event事件,否则得到的关联号可能为0,从而调用getpeeloff失败服务器端代码:#include <stdio.h>#include <sys/socket.h>#include <stdlib.h>#include <string.h>#include &l...原创 2018-03-14 20:07:34 · 488 阅读 · 0 评论 -
非阻塞版connect TCP回显C/S
客户端代码:#include <stdio.h>#include <stdlib.h>#include <unistd.h>#include <sys/socket.h>#include <errno.h>#include <string.h>#include <fcntl.h>#include原创 2018-02-28 14:19:35 · 473 阅读 · 0 评论 -
C/S 超时控制的几种写法
第一种:调用alarm(second)超时时,发送SIGALRM信号,产生中断. 实例:回显C/S服务端代码:#include <stdio.h>#include <stdlib.h>#include <sys/socket.h>#include <unistd.h>#include <string.h>#incl...原创 2018-02-17 08:27:51 · 1358 阅读 · 0 评论 -
一个简单的TCP/IP并发回显C/S(二)
解决问题: 服务器进程或主机意外崩溃或重启 客户端代码:vi c3.c#include <unistd.h>#include <stdlib.h>#include <sys/socket.h>#include <arpa/inet.h>#include <stdio.h>#include <errno.h>#include <string.h>#include <sys/selec原创 2017-11-03 10:21:40 · 443 阅读 · 0 评论 -
一个基于UDP的回显C/S(二)
解决问题:通过connect,使服务器端意外崩溃,重启,客户端能通过read函数而得知服务器端代码:vi s4.c#include <stdio.h>#include <stdlib.h>#include <unistd.h>#include <sys/socket.h>#include <arpa/inet.h>#include <errno.h>#include <string.h原创 2017-11-03 10:45:11 · 308 阅读 · 0 评论 -
一个简单基于UDP的回显C/S(一)
问题:服务器端意外崩溃或重启,客户端不得而知特点:迭代服务器服务端代码:vi s4.c#include <stdio.h>#include <stdlib.h>#include <unistd.h>#include <sys/socket.h>#include <arpa/inet.h>#include <errno.h>#include <string.h>#define SERV_P原创 2017-11-03 10:35:56 · 599 阅读 · 0 评论 -
一个可通过UDP和TCP套接字连接的回显服务器
服务器端代码:#include <stdio.h>#include <stdlib.h>#include <sys/socket.h>#include <arpa/inet.h>#include <errno.h>#include <string.h>#include <unistd.h>#include <signal.h>#include <sys/wait.h>#define原创 2017-11-03 21:10:18 · 427 阅读 · 0 评论 -
SCTP 回显C/S
服务端代码:#include #include #include #include #include #include #include #define BUFSIZE 4096#define PORT 6007#define LISTENQ 100#define SCTP_MAX_STREAM 15int main(int argc,char **argv) {原创 2018-02-01 21:22:04 · 352 阅读 · 0 评论 -
getaddrinfo的应用
/*********************************************************************************** 函数原型: int getaddrinfo(const char* host,const char* service,const struct addrinfo* hints,struct addrinfo** results)...原创 2018-02-09 15:52:35 · 328 阅读 · 0 评论 -
Unix/Linux守护进程服务器示例
服务端代码:#include <sys/socket.h>#include <string.h>#include <errno.h>#include <syslog.h>#include <unistd.h>#include <sys/wait.h>#include <netdb.h>#inc原创 2018-02-13 16:56:40 · 331 阅读 · 0 评论 -
gethostbyname函数和getservbyname函数的应用
/******************************************************************************* 函数原型: struct hostent* gethostbyname(const char* name) 函数说明:通过主机名调用gethostbyname返回包含主机正式名称,主机别名,IPV4地址等信息的结构体 返回值: 若成功原创 2018-02-07 21:18:25 · 640 阅读 · 0 评论 -
非阻塞读和写版 TCP回显C/S
通过fcntl设置套接字,标准输出,标准输入为非阻塞客户端代码:#include <stdio.h>#include <stdlib.h>#include <sys/socket.h>#include <unistd.h>#include <fcntl.h>#include <time.h>#include...原创 2018-02-27 16:38:20 · 371 阅读 · 0 评论 -
sendfile函數的使用
sendfile函數linux內核新加的函數,可以使得網絡傳輸文件時用户层无需分配缓冲区给将要传输的文件,从而能够节约内存,并直接调用系统调用 #include <sys/sendfile.h> ssize_t sendfile(int out_fd,int in_fd,off_t offset,size_t count);实例:#include <st...原创 2018-05-21 18:42:32 · 1682 阅读 · 0 评论