Linux网络编程
MarioHo
有请各位多多教导
展开
-
socket、listen、connect、bind、accept函数详解
socket函数为了执行网络I/O,一个进程必须做的第一件事情就是调用socket函数,指定期望的通信协议#include<sys/socket.h>int socket(int family,int type,int protocol)返回成功则返回非负文件描述符,若出错则为-1其中family参数指明协议族,它是某些常量AF_INET:IPv4、AF_INET:Ipv6等...原创 2019-04-16 16:54:59 · 1823 阅读 · 0 评论 -
简单TCP回射服务器
这个简单例子是执行如下步骤的一个回射服务器(1)客户从标准输入读入一行文本,并写给服务器(2)服务器从网络输入读入这行文本,并回射给客户(3)客户从网络输入读入这行回射文本,并显示在标准输出上我们在客户与服务器之间画了两个箭头,不过它们实际上构成一个全双工的TCP连接。fgets和fputs这两个函数来自标准I/O库,尽管我们将开发自己的回射服务器实现大多数TCP/IP实现却已经提供这样...原创 2019-04-18 10:03:05 · 718 阅读 · 0 评论 -
TIME_WAIT状态
毫无疑问,TCP中有关网络编程最不容易理解的就是它的TIME_WAIT状态。主动关闭的那一端经历了这个状态。该端点停留在这个状态的持续时间时最长字节生命期的两倍,有时候时2MSL。任何TCP实现都必须为MSL选择一个值。TIME_WAIT状态的持续时间时有限的。MSL是 任何IP数据报所能够在因特网存活的最长时间。因为每个数据报含有一个称为跳限的8位字段,它的最大值为255。尽管这个是一个跳数限...原创 2019-04-15 15:36:04 · 299 阅读 · 0 评论 -
TCP连接的建立和终止
三路握手建立一个TCP连接时会发生下述情形(1)服务器必须准备好接受外来的连接。通常通过socket、bind和listen这三个函数来完成,我们称之为被动打开(2)客户通过调用connect发起主动打开。这导致客户TCP发送一个SYN分节,它告诉服务器客户将在(待建立的)连接中发送的数据的初始序列号,通常SYN分节不携带数据,其所在IP数据报只含有一个IP首部、一个TCP首部及可能有的TC...原创 2019-04-15 15:07:26 · 221 阅读 · 0 评论 -
UDP、TCP、SCTP三大协议的概述
用户数据报协议(UDP)UDP是简单的传输层协议。应用进程网一个UDP套接字写入一个消息,该消息随后被封装到一个UDP数据报,该UDP数据报进而又被封装到一个IP数据报,然后发送到目的地。UDP不保证UDP数据报会到达其最终目的地,不保证各个数据报的先后顺序跨网络后保持不变,也不保证每个数据报只到达一次。我们使用UDP进行网络编程所遇到的问题是它所缺乏的可靠性。如果一个数据报到达了其最终的目的...原创 2019-04-15 13:17:28 · 1758 阅读 · 0 评论 -
一个简单的时间获取客户程序
让我们考虑一个具体例子,引入将本书中遇到的许多概念和说法。实现一个TCP当前时间查询客户程序的实现。该客户程序与其服务器建立一个TCP连接后,服务器直观可读格式简单地送回当前时间和日期。获取时间的服务器端代码#include <sys/types.h>#include <sys/socket.h>#include <a...原创 2019-04-15 00:31:14 · 524 阅读 · 1 评论 -
网络编程简介概述
要编写通过计算机网络通信的程序,首先要确这些程序相互通信所用的协议,在深入设计一个协议的细节之前,应该从高层次决断通信是由哪个程序发起以及响应在何时产生,举例来说,一般认为web服务器程序是一个长时间运行的程序(就是所谓的web客户程序,如某种浏览器和服务器进程的通信总是由客户进程发起的,大多数网络应用就是按照划分成客户和服务器来组织的。在设计网络应用的时候,确定总是由客户发起请求往往能够简化协议...原创 2019-04-14 21:58:44 · 369 阅读 · 0 评论 -
Select
我们能看到TCP客户同时处理两个输入,标准输入和TCP套接字。我们遇到的问题就是在客户阻塞于(标准输入上的)fgets调用期间,服务器进程会被杀死。服务器TCP虽然正确地给客户TCP发送一个FIN,但是既然客户进程正阻塞与标准输入读入的过程,它将看不到这个EOF,直到从套接字读时(可能已经过来很长时间)。这样的进程需要一种预先告知内核的能力,使得内核一旦发现进程指定的一个或多个I/O就绪(也就是说...原创 2019-04-21 19:41:47 · 269 阅读 · 0 评论 -
fork和exec函数
fork和exec函数fork函数时UNIX中派生新进程的唯一方法。#include<unistd.h>pid_t fork(void)如果你以前从未接触过该函数,那么理解fork最困难之处在于它调用一次,它却返回两次,它在调用进程(称为父进程)中返回一次,返回值是新派生进程(称为子进程)的进程ID号,在子进程又返回一次,返回值为0。因此,返回值本身告知当前进程是子进程还是父进...原创 2019-04-16 19:38:24 · 808 阅读 · 0 评论 -
信号、服务器崩溃
信号(signal)就是告知某个进程发生了某个事件的通知,有时也成为软件中断。信号通常是异步发生的,也就是说进程预先不知道信号的准确发生时刻。信号可以:由一个进程发送给另一个进程由内核发送给某个进程。上一节结尾提到的SIGCHLD信号就是由内核在任何一个进程终止时发送给它的父进程的一个信号。每个信号都有一个与之关联的处置,也称为行为。我们通过调用sigaction函数来设定一个信号的处置...原创 2019-04-20 18:17:12 · 446 阅读 · 0 评论 -
关于vsftp出现Failed to start vsftpd.service: The name org.freedesktop.PolicyKit1 was not provided 的解决办法
刚刚在搭建ftp服务器时,在配置好一切的参数之后,在我重启时,出现了无法启动的错误,将配置文件改了好多次都更改不好,终于在经过一阵查资料后,终于将问题定位了出来,下面先摆出错误信息:json@ubuntu:~$ service vsftpd start Failed to start vsftpd.service: The name org.freedesktop.PolicyKit1 was...原创 2019-05-17 12:18:47 · 11284 阅读 · 2 评论