1. Linux网络编程与普通程序区别
网络程序和普通的程序有一个最大的区别是网络程序是由两个部分组成的--客户端和服务器端.
1.1 客户端
主动与与外面的程序通信的程序。
例如使用ftp工具在Linux与Windows传文件时,ftp程序就是一个客户端程序,会去主动通信来获取文件。
1.2 服务器
被动的等待外面的程序来与自己通信的程序。
例如在ftp工具使用过程中,与ftp进行通信的程序就是服务器,可以从服务器获取文件。
2. Linux常用网络调试命令
netstat
令netstat是用来显示网络的连接,路由表和接口统计等网络的信息.netstat有许多的选项.
我们常用的选项是-na 用来显示详细的网络状态。
telnet
telnet是一个用来登录远程的程序,但是我们完全可以用这个程序来调试我们的服务端程序的.
比如我们的服务器程序在监听8888端口,我们可以用
telnet localhost 8888
来查看服务端的状况.
ping
ping 程序用来判断网络的状态是否正常,最经常的一个用法是
ping 192.168.1.1
表示我们想查看到192.168.1.1的硬件连接是否正常
3. TCP/UDP协议简单介绍
3.1 TCP协议
TCP(Transfer Control Protocol)传输控制协议是一种面向连接的协议, 在收发数据之前必须和对方建立可靠的连接(三次握手)。
当我们的网络程序使用这个协议的时候, 网络可以保证我们的客户端和服务端的连接是可靠的,安全的.
当客户端收到服务器的数据时,服务器会向客户端发送一个信号表示收到了数据,否则数据就会重新发送。
一般传输文件,命令等数据使用TCP来传输,保证数据的可靠性。
3.2 UDP协议
UDP(User Datagram Protocol)用户数据报协议是一种非面向连接的协议,它不与对方建立连接,而是直接就把数据包发送过去!
这种协议并不能保证我们的网络程序的连接是可靠的。
一般视频传输时使用UDP来进行传输,保证数据的实时性。
4. Linux下Socket编程
参考文章: [Linux网络编程入门](http://blog.csdn.net/jenshy/archive/2006/04/18/667944.aspx)
4.1 TCP传输
服务器端: 客户端(主动发起连接):
/* 相当于读写文件时的open函数,会返回一个sd描述符*/
a. sd = socket(); ---------------------------------------------- a. sd = socket();
/* 服务器一直在被动的响应请求,同时也在一直监测某个端口。
* bind函数可以将自己的ip,端口与sd绑定,
* 以后会监测ip与端口查看是否有数据传输过来
*/
b. bind(自己的ip,端口);
/* 启动监测数据 */
c. listen();
/* 客户端会发起连接,接受连接 */ /* 发送连接 */
d. accept(); ----------------------------------------------- b.connect(目的);
/* 发送数据 */
e. send(); ----------------------------------------------- c.recv();
/* 接受数据 */
f. recv(); -----------------------------------------------