
linux网络编程
文章平均质量分 78
形形色色的人
这个作者很懒,什么都没留下…
展开
-
网络编程从0到放弃再到入坑
1.Cannot assign requested address解决办法“Cannot assign requested address.”是由于linux分配的客户端连接端口用尽,无法建立socket连接所致,虽然socket正常关闭,但是端口不是立即释放,而是处于TIME_WAIT状态,默认等待60s后才释放。可能解决方法1--调低time_wait状态端口等待时间:1. 调低端口释放后的等待时间,默认为60s,修改为15~30ssysctl -w net.ipv4.tcp_fin_原创 2021-03-13 17:06:19 · 109 阅读 · 0 评论 -
epoll内核源码详解
作者:赛罗奥特曼~链接:https://www.nowcoder.com/discuss/26226?type=0&order=0&pos=27&page=1来源:牛客网/* * fs/eventpoll.c (Efficient event retrieval implementation) * Copyright (C) 2001,...,2009 Davide Libenzi * * This program is free software; you转载 2021-03-04 15:51:15 · 266 阅读 · 1 评论 -
网络编程几个IP地址【本机IP地址】、【 127.0.0.1】 和【 0.0.0.0 】的区别
概述 总体来讲,127.0.0.1是本机的环回地址,0.0.0.0代表本机上任何IP地址。下面分别详细讲解。 环回地址 127.0.0.1 严格来说127.0.0.1只是环回地址之一。所有127.x.x.x都是环回地址。从127.0.0.0 到 127.255.255.255 均予以保留。此地址块中的任何地址都将环回到本地主机中。此地址块中的任何地址都绝不会出现在任何网络中。 环回地址:所有发往该类地址的数据包都应该被 loop back。正常的网络包从IP层进入数据链路层,然后发送到网络上, 而发转载 2021-02-22 14:03:39 · 553 阅读 · 0 评论 -
linux网络编程之socket(五):tcp流协议产生的粘包问题和解决方案
首先说明的是发送端可以是一K一K地发送数据,而接收端的应用程序可以两K两K地提走数据,当然也有可能一次提走3K或6K数据,或者一次只提走几个字节的数据,也就是说,应用程序所看到的数据是一个整体,或说是一个流(stream),一条消息有多少字节对应用程序是不可见的,因此TCP协议是面向流的协议,这也是容易出现粘包问题的原因。而UDP是面向消息的协议,每个UDP段都是一条消息,应用程序必须以消息为单位转载 2016-10-15 23:13:03 · 443 阅读 · 0 评论 -
linux网络编程之TCP/IP基础(四):TCP连接的建立和断开、滑动窗口
一、TCP段格式:TCP的段格式如下图所示源端口号与目的端口号源端口号和目的端口号,加上IP首部的源IP地址和目的IP地址唯一确定一个TCP连接。序列号序号表示在这个报文段中的第一个数据字节序号。确认号仅当ACK标志为1时有效。确认号表示期望收到的下一个字节的序号。头部长度4位,TCP头部最多60个字节,最少20个字节保留位6转载 2016-10-18 16:22:29 · 334 阅读 · 0 评论 -
socket之三次握手和四次挥手 wireshark解析
server.c#include #include #include #include #include #include #include #include #include #include #include #define ERR_EXIT(m) \ do \ { \ perror(m); \原创 2016-10-20 22:15:09 · 451 阅读 · 0 评论 -
epoll
server.c#include #include #include #include #include #include #include #include "wrap.h"#define MAXLINE 80#define SERV_PORT 8000#define OPEN_MAX 1024int main(int argc, char *argv[]){原创 2016-11-06 23:10:01 · 279 阅读 · 0 评论 -
socket IPC 本地socket通讯
socket API原本是为网络通讯设计的,但后来在socket的框架上发展出一种IPC机制,就是UNIX Domain Socket。虽然网络socket也可用于同一台主机的进程间通讯(通过loopback地址127.0.0.1),但是UNIX Domain Socket用于IPC更有效率:不需要经过网络协议栈,不需要打包拆包、计算校验和、维护序号和应答等,只是将应用层数据从一个进程拷贝原创 2016-11-03 22:30:12 · 1723 阅读 · 0 评论 -
select、epoll处理的IO模型
epool_server.c#include #include #include #include #include #include #include #include "wrap.h"#define MAXLINE 80#define SERV_PORT 8000#define OPEN_MAX 1024int main(int argc, char *argv[])原创 2016-11-25 23:12:31 · 316 阅读 · 0 评论 -
socket实现最最最简单的http请求的数据
/* For sockaddr_in */#include /* For socket functions */#include /* For gethostbyname */#include #include #include #include int main(int c, char **v){ const char query[] = "GET原创 2016-12-03 21:00:02 · 620 阅读 · 0 评论 -
socket api 介绍
socket函数包含头文件<sys/socket.h>功能:创建一个套接字用于通信原型int socket(int domain, int type, int protocol);参数domain :指定通信协议族(protocol family)type:指定socket类型,流式套接字SOCK_STREAM,数据报套接字SOCK_DGRAM,原始套接字SOCK_RAWprotocol :协议类型返回值:成功返回非负整数, 它与文件描述符类似,我们把它称为套接口描述字,简称套接字。失败返原创 2016-10-11 09:34:31 · 1005 阅读 · 0 评论 -
使用select 封装 socket api
select 用select封装超时(connect ,accept read,write)int clt_socket_init(void **handle,int conn_time,int send_time,int recv_time){ int ret; if(handle == NULL || conn_time < 0 || send_time < 0 |原创 2016-10-23 20:55:36 · 944 阅读 · 0 评论 -
linux网络编程之socket(四):使用fork并发处理多个client的请求和对等通信p2p
一、在前面讲过的回射客户/服务器程序中,服务器只能处理一个客户端的请求,如何同时服务多个客户端呢?在未讲到select/poll/epoll等高级IO之前,比较老土的办法是使用fork来实现。网络服务器通常用fork来同时服务多个客户端,父进程专门负责监听端口,每次accept一个新的客户端连接就fork出一个子进程专门服务这个客户端。但是子进程退出时会产生僵尸进程,父进程要注意处理SIGCHLD转载 2016-10-18 09:16:29 · 376 阅读 · 0 评论 -
linux网络编程之socket(三):最简单的回射客户/服务器程序、time_wait 状态
下面通过最简单的客户端/服务器程序的实例来学习socket API。echoser.c 程序的功能是从客户端读取字符然后直接回射回去。 C++ Code 123456789101112131415161718192021222324252627转载 2016-10-18 09:16:03 · 1022 阅读 · 0 评论 -
linux网络编程之socket(二):C/S程序的一般流程和基本socket函数
一、基于TCP协议的网络程序下图是基于TCP协议的客户端/服务器程序的一般流程:服务器调用socket()、bind()、listen()完成初始化后,调用accept()阻塞等待,处于监听端口的状态,客户端调用socket()初始化后,调用connect()发出SYN段并阻塞等待服务器应答,服务器应答一个SYN-ACK段,客户端收到后从connect()返回,同时应答一个AC转载 2016-10-18 09:15:15 · 404 阅读 · 0 评论 -
apue3 搭建(基于ubuntu 12.04LTS)
1.在网上下载书中源代码,点击打开链接2.解压文件:tar -zxvf *.tar.gz3.cd apue.3e/4.make在这个过程中,你会看到最后由于can,t find -lbsd而不能make成功,解决办法是添加libbsd.a的静态链接库sudo apt-get install libbsd-dev5.make(again)转载 2015-09-21 23:41:01 · 640 阅读 · 0 评论 -
socket 回射服务器
server.c#include #include #include #include #include #include #include #include #include #include #include #include #include #include /* int socket(int domain, int type, int prot原创 2016-10-11 11:33:01 · 294 阅读 · 0 评论 -
socket 实现的简单的p2p服务程序
p2pclient.c#include #include #include #include #include #include #include #include #include #include #include #include #include #include /* int socket(int domain, int type, int p原创 2016-10-12 22:14:51 · 3218 阅读 · 1 评论 -
select 优化socket回射服务器
server.c#include #include #include #include #include #include #include #include #include #include #include #include #include #include /* int socket(int domain, int type, int protoc原创 2016-10-19 15:09:07 · 390 阅读 · 0 评论 -
poll
poll server端:/* server.c */#include #include #include #include #include #include #include #include "wrap.h"#define MAXLINE 80#define SERV_PORT 8000#define OPEN_MAX 1024int ma原创 2016-11-06 22:59:35 · 292 阅读 · 0 评论 -
基于Socket的UDP和TCP编程介绍
一、概述TCP(传输控制协议)和UDP(用户数据报协议是网络体系结构TCP/IP模型中传输层一层中的两个不同的通信协议。TCP:传输控制协议,一种面向连接的协议,给用户进程提供可靠的全双工的字节流,TCP套接口是字节流套接口(stream socket)的一种。UDP:用户数据报协议。UDP是一种无连接协议。UDP套接口是数据报套接口(datagram socket)的一种。二、T转载 2016-11-07 15:28:04 · 472 阅读 · 0 评论 -
linux网络编程之TCP/IP基础(一):TCP/IP协议栈与数据报封装
http://blog.youkuaiyun.com/jnu_simba/article/details/8957242一、ISO/OSI参考模型OSI(open system interconnection)开放系统互联模型是由ISO(International Organization for Standardization)国际标准化组织定义的网络分层模型,共七层,如下图转载 2016-10-18 09:08:09 · 435 阅读 · 0 评论 -
linux网络编程之TCP/IP基础(二):利用ARP和ICMP协议解释ping命令
一、MTU以太网和IEEE 802.3对数据帧的长度都有限制,其最大值分别是1500和1492字节,将这个限制称作最大传输单元(MTU,Maximum Transmission Unit)。如果IP层有一个数据报要传,而且数据的长度比链路层的MTU还大,那么IP层就要进行分片(Fragmentation),把数据报分成若干片,这样每一片都小于MTU。当网络上的两台主机互相进行通信时,两台主转载 2016-10-18 09:10:26 · 489 阅读 · 0 评论 -
linux网络编程之TCP/IP基础(三):IP数据报格式和IP地址路由
一、IP数据报格式IP数据报格式如下:注:需要注意的是网络数据包以大端字节序传输,当然头部也得是大端字节序,也就是说:The most significant bit is numbered 0 at the left, and the least significant bit of a 32-bit value is numbered 31 on the r转载 2016-10-18 09:10:52 · 457 阅读 · 0 评论 -
linux网络编程之TCP/IP基础(五):分析一帧基于UDP的TFTP协议帧
下图是UDP的段格式:相比TCP段格式,UDP要简单得多,也没啥好说的,需要注意的是UDP数据长度指payload加上首部的长度。下面分析一帧基于UDP的TFTP协议帧:以太网首部0000: 00 05 5d 67 d0 b1 00 05 5d 61 58 a8 08 00 IP首部0000: 45 000010:转载 2016-10-18 09:11:42 · 361 阅读 · 0 评论 -
linux网络编程之socket(一):socket概述和字节序、地址转换函数
一、什么是socketsocket可以看成是用户进程与内核网络协议栈的编程接口。socket不仅可以用于本机的进程间通信,还可以用于网络上不同主机的进程间通信。socket API是一层抽象的网络编程接口,适用于各种底层网络协议,如IPv4、IPv6,以及以后要讲的UNIX Domain Socket。然而,各种网络协议的地址格式并不相同,如下图所示:IPv转载 2016-10-18 09:14:50 · 947 阅读 · 0 评论 -
unix网络编程卷2的头文件unpipc.h下载和编译(转)
http://blog.chinaunix.net/uid-27164517-id-3320677.html1. 编译原书所带例子: unpv22e.tar.gz 下载地址:http://www.kohala.com/start/unpv22e/unpv22e.tar.gz 2. 解压: $tar -zxvf unpv22e.tar.gz 3. 编译:转载 2015-09-20 23:00:31 · 903 阅读 · 0 评论