
网络编程
godop
这个作者很懒,什么都没留下…
展开
-
TCP连接的建立和终止
1.三路握手建立一个tcp连接会发生下列情形1.1服务器必须准备好接受外来的连接。这通常通过调用socket,bind和listen这3个函数来完成,我们称之为被动打开1.2客户端通过调用connect发起主动打开(active open)。这导致客户tcp发送一个SYN分节,它告诉服务器客户将在(带建立的)连接中发送的数据的初始序列号。通常SYN分节不携带数据,其所在IP数据报只含有一个IP首部...原创 2018-04-10 17:23:16 · 525 阅读 · 0 评论 -
网络编程之socket函数
基本TCP客户/服务器程序的套接字函数socket函数的参数:为了执行网络I/O,一个进程必须做的第一件事情就是调用socket函数,指定期望的通信协议类型(使用IPv4的TCP,使用IPv6的UDP,UNIX域字节流协议等)。#include<sys/socket.h>int socket(int family, int type, int protocol);返回:成功则为非负描述...原创 2018-04-10 20:56:38 · 948 阅读 · 0 评论 -
网络编程之bind函数
基本TCP客户端/服务器程序的套接字函数1、bind函数把一个本地协议地址赋予一个套接字。对于网际协议,协议地址是32位的IPv4地址或是128位的IPv6地址与16位的TCP或UDP端口号的组合。#include<sys/socket.h>int bind(int sockfd, const struct sockaddr, socklen_t addrlen);第二个参数是一个指...原创 2018-04-10 21:56:15 · 44753 阅读 · 4 评论 -
网络编程之listen函数
基本TCP客户端/服务器程序的套接字函数listen函数仅由TCP服务调用,它做两件事 1.当socket函数创建一个套接字时,它被假设为一个主动套接字,也就是说,它是一个将调用connect连接的客户套接字。listen函数把一个未连接的套接字转换成一个被动套接字,指示内核应该接受指向该套接字的连接请求。如下图所示,调用listen导致套接字从CLOSED状态转换到LISTEN状态。 ...原创 2018-04-11 13:07:09 · 21169 阅读 · 2 评论 -
网络编程之accept函数和accept函数在三次握手中的位置
accept函数实际上是在三次握手之后,具体原因请看文章结尾具体解释。基本TCP客户端/服务器程序的套接字函数accept函数由TCP服务器调用,用于从已完成连接队列队头返回下一个已完成连接(从这不难看出accept是在三次握手之后,文章最后具体说明,已完成连接队列请转连接自行观看)。如果已完成队列为空,那么进程被投入睡眠(嘉定套接字为默认的阻塞方式)。#include<sys/socket...原创 2018-04-11 19:00:46 · 7567 阅读 · 0 评论 -
设计一个简单的并发服务器
当服务一个客户请求可能花费较长时间时,我们并不希望真个服务器被单个客户长期占用,而是希望同时服务多个客户。Unix中编写并发服务器程序最简单的办法就是fork一个子进程来服务每个客户。pid_t pid;int listenfd,connfd;listenfd=e(...); /* fill in sockaddr_in{} with server`s well_known p...原创 2018-04-11 20:22:09 · 568 阅读 · 0 评论 -
网络编程之close函数
通常Unix close函数也用来关闭套接字,并终止TCP连接。 #include<sys/socket.h> int close(int sockfd); 返回:若成功则返回0.失败则返回-1; close一个TCP套接字的默认行为是把该套接字标记成已关闭,然后立即返回到调用程序。该套接字描述符不能再由调用进程使用,也就是说它不能再作为r...原创 2018-04-12 14:01:14 · 3956 阅读 · 1 评论 -
客户端的连接函数connect函数
TCP客户用connect函数来建立于TCP服务器端的连接#include<sys/socket.h>int connect(int sockfd, const struct sockaddr *servaddr, int *addrlen); 返回:若成功则返回0,失败则返回-1; sockfd是有socke...原创 2018-04-12 21:16:03 · 8669 阅读 · 0 评论 -
带外数据
许多传输层有带外数据的概念,它有时也称为经加速数据。其想法是一个连接的某端发生了重要的事情,而且该端希望迅速通告其对端。这里“迅速”意味着这种通知应该在已经排队等待发送的任何“普通”数据之前发送。也就是说,带外数据被认为具有比普通数据更高的优先级。带外数据并不要求在客户和服务器之间再使用一个连接,而是被映射到已有的连接中。(udp没有实现带外数据)TCP并没有真正的带外数据,只不过提供了我们紧急模...原创 2018-06-02 22:02:36 · 1435 阅读 · 0 评论