网络在我们生活中日益频繁。网络化已经成为了一个社会发展的趋势。winsocket 是一种常用的网络编程方法。
首先我们来讲讲计算机网络的基本知识。首先是IP地址,在网络中每个主机都有一个IP地址。(一个主机可以有多个IP,但是在每个网络里面每个主机都必须有唯一的一个IP,比如说你的电脑有两个IP一个为192.168.1.34 另一个为192.168.2.34 这说明了这个主机在两个点1网段里。也在点2网段里面 1网段上计算机可以找192.168.1.34,2网段上的计算机是找不到192.168.1.34的)网络相当于一个社群,你相当于主机,你在A社群叫xx,在b社群里面你可能叫yy。相当于你在一个社群中有了一个身份证了,别人可以通过这个"身份证"来找到你。然后在来看看协议。所谓的协议都是一写通信规则。其实我的汉语,英语都是协议,他们用来处理人与人交流的协议,而TCP/IP,UDP/IP都是用来在计算机在网络上的交流的协议。端口的概念。当主机A通过网络把数据发到B主机上,B主机里面有很多个进程,到底是哪个进程在接受数据呢?所以我们要给每个进程分配一个端口号。端口号 对应进程。tcp/ip编程对应着客户端和服务器端。服务器端提供服务。客户端请求服务。所以服务端是一个被动的过程。客户端是一个主动的过程。服务端程序的流程是这样。初始网络协议WSAStartup,建立(socket)socket ,绑定(bind)socket,绑定的时候用的本机的sockaddr(这个记录的是本机的IP和端口号),其实是将socket绑定到本机的IP和端口上,监听(listen)是将socket设置为监听模式,用于监听网络。接受(accept)当网络上有客户端要求服务的时候,接受客户的请求,返回一个新建本次服务的套接字socketconnet,并用一个sockaddr 变量记录下客户的IP和端口。然后是收发数据。接收数据时recv,该函数的参数中套接字的是本次连接建立的socketconnet。发送数据 是send。该函数的一个参数是本次连接的套接字socketconnet。最后关闭socket。
对于客户端来说:客户端是一个主动的过程。他的流程是 1建立socket和SOCKADDR_IN svr。 svr 用来记录服务的IP和端口号。2想服务器发送连接请求,客户端是不需要绑定本机的,他是建立一个连接,使用connet函数,就想你去银行办理业务,你不要常年呆在银行,只要你要办理业务的时候去一次就行了。你这去一次就是一次连接请求。3连接完成之后,我们就可以建立联系了 收发数据。最后关闭socket。
UDP协议传输的时候,是不建立连接的,所以的可靠性是要低于TCP的。UDP协议的服务器端程序流程是这样的:1建立socket和本地SOCKADDR SVR;2绑定(bind)将socket绑定到本地的ip和端口上。3建立客户端的sockaddr client用来记录客户端数据,接收数据。recvfrom 。客户端的流程 是建立socket和服务端的sockaddr,发送数据,接受数据。
不管是什么协议。1 服务器都是要将本机的socketaddr 和socket绑定。
2收发数据的时候都是要知道对方的sockaddr。客户端都是通过事先定义的。而服务端是不知道什么样客户要申请服务的,所以服务器端都是在交互得到客户端的sockaddr。tcp 服务器端是接受连接的时候,记录下这次连接的socketconnet,而udp 没有建立连接,是在接受的时候(recvfrom)。
3 udp实时性好,可靠性差,tcp实时性差,可靠性好。
原文地址:http://blog.csdn.net/wuan584974722/article/details/26619117