socket模块 TCP通讯(服务器|客户端) 常见的异常 循环通讯

1、socket模块 2、TCP通讯(服务器|客户端) 3、常见的异常 4、循环通讯

1、socket 套接字

  本质上是一个模块,里面封装了一些网络通讯协议 是处于传输层和应用层之间的一个抽象层,实际在OSI七层协议中并不存在 也就是没有socket也能能够通讯 ,但是这样一来 我们必须完全按照OSI规定的各种协议来编码 这是一个重复,复杂的过程,为了提高开发效率,就出现了socket模块,专门帮我们封装了传输层中的一堆协议,有socket模块之后 当我们需要编写网络通讯的程序时,就不需要在关心具体的协议细节,直接使用socket模块提供的功能接口即可

2、TCP通讯

  网络通讯一定分为两端,服务器和客户端

  服务器: 

    1.创建socket对象 server = socket.socket()

    2.绑定一个固定的ip和端口 server.bind ip必须是本机ip 端口1024-65535 不要使用常见的端口 web:80 / 8080 mysql 3306 ssh:22 ftp:21

    3.开始监听客户端的到来 server.listen

    4.接收客户端的链接请求 server.accept # 阻塞直到客户链接到来 没有新连接则不可能执行该函数

    5.收发数据 需要循环 recv 收 收多少字节数 send 发 只能发二进制数据

  客户端:

    1)创建socket对象  client = socket.socket()

    2)链接服务器    client.connect((ip,port))

    3)收发数据   通常需要循环  send 发    只能发二进制数据    recv 收    收多少字节数

    4)断开链接   client.close()

3、常见的异常

  1)一方异常下线,另一方还要收发数据 ,ConnectionResetError 在send recv的地方 加上try 客户端也需要异常处理

    在数据传输中

      在Linux中,如果客户端下线了,服务器不会抛出异常,只会收到空消息

      windows中,当客户端正常关闭时,服务器会收到空消息

    所以需要加入判断,为空时,跳出循环,结束进程

  2)端口占用异常

    重复运行服务器,之前的进程没有正确关闭,关闭和打开端口,都是操作系统负责

    在一些极端情况下,可能应用程序已经正确接收并且通知了操作系统要关闭端口,

    但是操作系统并没及时处理

    解决方式: 1 更换端口   2 查后台进程 杀掉它   3 重启服务器电脑

4、循环通讯

    while Ture

 

 

 

posted @ 2019-05-29 17:22  水天两色  阅读(609)  评论(0)    收藏  举报