全球旧事资料 分类
只需知道目的机器的IP地址,而客户通过哪个端口与服务器建立连接并不需要关心,socket执行体为你的程序自动选择一个未被占用的端口,并通知你的程序数据什么时候到打断口。Co
ect函数启动和远端主机的直接连接。只有面向连接的客户程序使用socket时才需要将此socket与远端主机相连。无连接协议从不建立直接连接。面向连接的服务器也从不启动一个连接,它只是被动的在协议端口监听客户的请求。Liste
函数使socket处于被动的监听模式,并为该socket建立一个输入数据队列,将到达的服务请求保存在此队列中,直到程序处理它们。i
tliste
i
tsockfd,i
tbacklogSockfd是Socket系统调用返回的socket描述符;backlog指定在请求队列中允许的最大请求数,进入的连接请求将在队列中等待accept它们(参考下文)。Backlog对队列中等待服务的请求的数目进行了限制,大多数系统缺省值为20。如果一个服务请求到来时,输入队列已满,该socket将拒绝连接请求,客户将收到一个出错信息。当出现错误时liste
函数返回1,并置相应的err
o错误码。
faccept函数让服务器接收客户的连接请求。在建立好输入队列后,服务器就调用accept函数,然后睡眠并等待客户的连接请求。i
taccepti
tsockfdvoidaddri
taddrle
sockfd是被监听的socket描述符,addr通常是一个指向sockaddr_i
变量的指针,该变;addrte
通量用来存放提出连接请求服务的主机的信息(某台主机从某个端口发出该请求)常为一个指向值为sizeofstructsockaddr_i
的整型指针变量。出现错误时accept函数返回1并置相应的err
o值。首先,当accept函数监视的socket收到连接请求时,socket执行体将建立一个新的socket,执行体将这个新socket和请求连接进程的地址联系起来,收到服务请求的初始socket仍可以继续在以前的socket上监听,同时可以在新的socket描述符上进行数据传输操作。数据传输Se
d和recv这两个函数用于面向连接的socket上进行数据传输。Se
d函数原型为:i
tse
di
tsockfdco
stvoidmsgi
tle
i
tflagsSockfd是你想用来传输数据的socket描述符;msg是一个指向要发送数据的指针;Le
是以字节为单位的数据的长度;flags一般情况下置为0(关于该参数的用法可参照ma
手册)。Se
d函数返回实际上发送出的字节数,可能会少于你希望发送的数据。在程序中应该将se
d的返回值与欲发送的字节数进行比较。当se
d返回值与le
不匹配时,应该对这种情况进行处理。charmsg
好听全球资料 返回顶部