TCP_UDP网络编程

网络通讯的实质也是数据的传输

数据的传输三要素:源,目的,长度


TCP:有连接

假如网络环境非常的糟糕,怎么确定数据又B传给A了

肯定有三次握手之类的验证,数据由B发送出去之后,肯定能被A收到


A,B不一定是两台电脑,而是指服务器程序和客服端程序,这两个程序可以同在一台电脑上,也可以在不同电脑上



UDP:无连接

B把数据扔出去之后就不管了,数据能不能到达AB不关心。


TCP、UDP传输各有用途。对于控制命令,文件传输用TCP,对于视频用户用UDP


TCP_UDP网络编程


我们写程序的思路是什么了???


我们可以仿照I/O文件读写来做


fd=open("文件名")
read(fd,buf,len)

write(fd,buf,len)


TCP_UDP网络编程



这个里面还有一个注意的地方,我们用的服务器只有一个,但是我们的客户端可以N个


解决方法:利用子进程来做

               我们判断fork这个函数来做,每来一个客户端连接服务器,我们就用fork负责出一个子进程

              主进程从else分支继续往下跑,子进程从if(0==fork())分支往下跑


与之对应的是,当我们查看进程个数 ps -A 只列出所有进程





还有里面遇到僵尸进程:一个进程使用fork创建子进程,如果子进程退出,而父进程并没有调用wait或waitpid获取子进程的状态信息,那么子进程的进程描述符仍然保存在系统中。这种进程称之为僵死进程。



下面的那个UDP编程,可以对比与那个TCP编程,那个里面区别就是connect的有无情况,因为在UDP的网络编程中不需要建立连接,即使调用了connect函数,实际上也没有建立一条链路,只不过是把目的地址和socket建立一条连接而已,之后可以用send函数发送数据,不调用connect函数,可以直接调用sendto函数。