【编程基础】初学者如何学习Linux网络

1. Linux网络编程--网络知识介绍

网络程序和普通的程序有一个最大的区别是网络程序是由两个部分组成的--客户端和服务器端.

1.1 客户端

在网络程序中,如果一个程序主动和外面的程序通信,那么我们把这个程序称为客户端程序。 比如我们使用ftp程序从另外一

个地方获取文件的时候,是我们的ftp程序主动同外面进行通信(获取文件), 所以这个地方我们的ftp程序就是客户端程序。

1.2 服务端

和客户端相对应的程序即为服务端程序。被动的等待外面的程序来和自己通讯的程序称为服务端程序。

比如上面的文件获取中,另外一个地方的程序就是服务端,我们从服务端获取文件过来。

互为客户和服务端

实际生活中有些程序是互为服务和客户端。在这种情况项目, 一个程序既为客户端也是服务端。

1.3 常用的命令

由于网络程序是有两个部分组成,所以在调试的时候比较麻烦,为此我们有必要知道一些常用的网络命令

1.3.1 netstat

命令netstat是用来显示网络的连接,路由表和接口统计等网络的信息.netstat有许多的选项.

我们常用的选项是-na 用来显示详细的网络状态.至于其它的选项我们可以使用帮助手册获得详细的情况.

1.3.2 telnet

telnet是一个用来登录远程的程序,但是我们完全可以用这个程序来调试我们的服务端程序的.

比如我们的服务器程序在监听8888端口,我们可以用

telnet localhost 8888

来查看服务端的状况.

1.3.3 ping 程序用来判断网络的状态是否正常,最经常的一个用法是

ping 192.168.0.1

表示我们想查看到192.168.0.1的硬件连接是否正常

1.4 TCP/UDP介绍

1.4.1 TCP(Transfer Control Protocol)传输控制协议

是一种面向连接的协议, 当我们的网络程序使用这个协议的时候,网络可以保证我们的客户端和服务端的连接是可靠的,安全的。

1.4.2 UDP(User Datagram Protocol)用户数据报协议

是一种非面向连接的协议,这种协议并不能保证我们的网络程序的连接是可靠的,所以我们现在编写的程序一般是采用TCP协议的.

2. Linux网络编程--初等网络函数介绍(TCP)

Linux系统是通过提供套接字(socket)来进行网络编程的.网络程序通过socket和其它几个函数的调用,会返回一个 通讯的文件描述符, 我们可以将这个描述符看成普通的文件的描述符来操作, 这就是linux的设备无关性的好处。我们可以通过向描述符读写操作实现网络之间的数据交流。

2.1 socket

int socket(int domain, int type,int protocol):

用于主机之间通信建立。

2.2 bind

int bind(int sockfd, struct sockaddr *my_addr, int addrlen):

将本地的端口同socket返回的文件描述符捆绑在一起

2.3 listen

int listen(int sockfd,int backlog)

listen函数将bind的文件描述符变为监听套接字

2.4 accept

int accept(int sockfd, struct sockaddr *addr,int *addrlen)

accept调用时,服务器端的程序会一直阻塞到有一个 客户程序发出了连接。

2.5 connect

int connect(int sockfd, struct sockaddr * serv_addr,int addrlen)

connect函数是客户端用来同服务端连接的

3. 总结

总的来说网络程序是由两个部分组成的--客户端和服务器端.它们的建立步骤一般是:

服务器端:

socket-->bind-->listen-->accept

客户端:

socket-->connect

原文发布于微信公众号 - 程序员互动联盟(coder_online)

原文发表时间:2015-06-04

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏杂烩

Redis linux下安装配置 原

make命令执行完成后,会在当前目录下生成本个可执行文件,分别是redis-server、redis-cli、redis-benchmark、redis-sta...

762
来自专栏醉生梦死

Linux命令:find . -type d -name "doc" -exec rm -rf {} \;报错分析及解决

    故,在执行命令: # find . -type d -name "doc" -exec rm -rf {} \; 将查找到的目录传递给rm进行删除,...

1952
来自专栏云计算教程系列

如何在Ubuntu 16.04上设置Node.js生产应用程序

Node.js是一个开源JavaScript运行时环境,用于轻松构建服务器端和网络应用程序。该平台可在Linux,OS X,FreeBSD和Windows上运行...

650
来自专栏转载gongluck的CSDN博客

搭建 FTP 文件服务

安装并启动 FTP 服务 任务时间:5min ~ 10min 安装 VSFTPD 使用 apt-get 安装 vsftpd: sudo apt-get in...

1.1K7
来自专栏技术博文

redis配置文件相关

1. 默认情况下,redis不是在后台运行的,如果需要在后台运行,把该项的值更改为yes daemonize no 2. 当Redis在后台运行时,Redis...

3158
来自专栏自动化测试实战

Git教程——撤销内容修改和版本回退

1.6K10
来自专栏刺客博客

Linux下使用mkfs快速对磁盘进行分区

1394
来自专栏DeveWork

设置你的Gravatar头像的方法

Gravatar是Globally Recognized Avatar的缩写,是gravatar推出的一项服务,意为“全球公用的头像”。如果在Gravatar的...

2867
来自专栏运维小白

4.2 du命令

du命令 du命令,查看文件的大小 du命令用法 du -sh 目录/文件命令用法 du -sh 目录/文件 查看目录或文件的大小 [root@localh...

2299
来自专栏用户2442861的专栏

利用SecureCRT上传、下载文件(使用sz与rz命令),超实用!

    借助securtCRT,使用Linux命令sz可以很方便的将服务器上的文件下载到本地,使用rz命令则是把本地文件上传到服务器。

2421

扫码关注云+社区

领取腾讯云代金券