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