zoukankan      html  css  js  c++  java
  • Socket原理与编程基础

    •socket简介

      socket是进行通讯的一种方式,即调用这个网络库的一些api韩寒苏实现分布在不同主机的相关进程之间的数据交换。

      名词定义:

        1)IP地址:依照TCP/IP协议分配给本地主机的网络地址,2个进程要通信,任一进程首先要知道通讯对方的位置,即IP地址。

        2)端口号:用来辨别本地通讯进程,一个本地的基尼从在通讯时均会占用一个端口号,不同的进程端口号不同,因此在通讯前必须要分配一个没有访问的端口号。

        3)连接:两个进程间的通讯链路

    •客户/服务端模式

      •服务端:其过程是首先服务器放要先开启,并根据请求提供相应的服务。

      1)打开一通信通道并告知本地主机,他愿意在某一个公认地址上某端口接收客户请求

      2)等待客户请求到到该端口

      3)接收到客户端的请求时,处理该请求并发送应答信号。接收到并发服务请求,要激活一新进程来处理这个客户请求,新进程处理此客户请求并不需要对其请求做出应答。服务完成后,关闭新进程与客户的通信链路,并终止。

      4)返回第2步骤,等待另外一个客户请求

      5)关闭服务器

      •客户端:

      1)打开-通信通道,并连接到服务器所在主机的特定端口

      2)向服务器发请求报文,等待并接收应答,继续提出请求

      3)请求结束后关闭通道并终止。

      •说明:

      1)从上面的模式来看,流程会有所不同,因此其代码也会不同

      2)服务器进程先启动,主要系统运行,该服务进行就一直存在,知道进程关闭。

    •常见API函数

      1)socket():创建套接字,-- create a new socket object

      2)bind(address):绑定本地地址,必须确保之前没有绑定过。

      3)close():

      4)accept(self):

         accept() -> (socket object, address info)  返回connection、address对,其中connection是新的socket对象,可以在上面发送和接收数据,address是另一端的socket地址

      5)connect(address):连接该地址上的远端socket

      6)getsockname():getsockname() -> address info    返回socket自己的地址,对查找端口号有用

      7)listen(backlog):监听socket连接,参数表示最大连接队列数,通常为5,最小为0

      8)recv(bufsize):recv(buflen[, flags]) -- receive data   接收数据,返回表示接收到数据的string。bufsize表示一次接收到的数据最大量

      9)send(string):发送数据,返回发送的数据量,程序自己负责检查是否所有的数据已发送并自己处理未发送的数据

      10)sendall(string):sendall(data[, flags])     发送数据,该函数会持续发送数据知道数据发送完毕或出现错误为止。若发送成功返回none。

      11)settimeout():

          设置阻塞模式下socket的超时时间,其值以秒计算,若给定float,socket的后续操作若在给定超时时间内没有完成,将触发timeout异常。

      12)gettimeout():返回超时时间,单位秒或None

      13)gethostname():gethostname() -> string    返回当前主机名,--return the current hostname

      14)gethostbyname():

          gethostbyname(host) -> address    通过主机名获取IP地址,参数为主机名,如:PC-20150412FUUA-- map a hostname to its IP number

      15)gethostbyaddr():

          gethostbyaddr(host) -> (name, aliaslist, addresslist)     参数为主机名或IP地址 -- map an IP number or hostname to DNS info,如:('PC-20150412FUUA', [], ['fe80::349b:92dc:1bb2:58ca'])

      16)getservbyname():

          socket.getservbyname('http','tcp')   参数:将服务名和一个协议名,返回的是端口号-- map a service name and a protocol name to a port number

  • 相关阅读:
    SharePoint 2016 图文安装教程
    CSS选择器的特殊性和LOVE HA
    CSS相邻兄弟选择器
    Javascript高级程序设计——函数
    Javascript高级程序设计——基本概念(二)
    Javascript高级程序设计——基本概念(一)
    Javascript高级程序设计——在HTML中使用Javascript
    Javascript高级程序设计——javascript简介
    Javascript包含对象的数组去重
    JQuery阻止表单提交的方法总结
  • 原文地址:https://www.cnblogs.com/dengyg200891/p/4931352.html
Copyright © 2011-2022 走看看