zoukankan      html  css  js  c++  java
  • Python--网络编程-----socket编程示例--打电话--加上通讯循环与bug修复

    一、服务端

     1 import socket
     2 
     3 
     4 phone = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
     5 phone.bind(('127.0.0.1', 8080))  # 0-65535:0-1024给操作系统使用
     6 phone.listen(5)
     7 
     8 print('starting.....')
     9 conn, client_addr = phone.accept()
    10 print(client_addr)
    11 
    12 while True:  # 通信循环
    13     data = conn.recv(1024)
    14     print('客户端的数据', data)
    15 
    16     conn.send(data.upper())
    17 
    18 conn.close()
    19 phone.close()

    二、客户端

     1 import socket
     2 
     3 
     4 # 1、买手机
     5 phone = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
     6 # print(phone)
     7 
     8 # 2、拨号
     9 phone.connect(('127.0.0.1', 8080))
    10 
    11 # 3、发、收消息
    12 while True:
    13     msg = input('>>:').strip()
    14     phone.send(msg.encode('utf-8'))
    15     data = phone.recv(1024)
    16     print(data)
    17 
    18 # 4、关闭
    19 phone.close()

    客户端结果为:

    1 >>:he
    2 b'HE'
    3 >>:asdf
    4 b'ASDF'
    5 >>:

    服务端结果为:

    1 starting.....
    2 ('127.0.0.1', 64037)
    3 客户端的数据 b'he'
    4 客户端的数据 b'asdf'

    三、有时间运行服务端程序的时候,显示端口占用错误,这时候可以使用如下代码防止出现这种情况

    1 phone.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)

    四、当客户端输入为空时(也就是直接回车),按回车后,客户端一直横在那,

    原因分析:

    客户端发送空信息需要调用操作系统接口,把客户端程序内存中要发送的信息拷贝到操作系统内存中,如果为空的话,操作系统内存收不到数据,它也就不会发送给服务端,所以出现客户端横在那的现象

    解决方法:

    修改客户端代码:

    1 while True:
    2     msg = input('>>:').strip()
    3     if not msg:
    4         continue
    5     phone.send(msg.encode('utf-8'))
    6     data = phone.recv(1024)
    7     print(data)

    五、如果客户端意外断开连接发生中断,linux系统中,服务端会发生死循环,Windows系统中,服务端会直接报错

    解决方法:

    修改服务端代码:

     1 while True:  # 通信循环
     2     try:
     3         data = conn.recv(1024)
     4         if not data:  # 适用于linux操作系统
     5             break
     6         print('客户端的数据', data)
     7     
     8         conn.send(data.upper())
     9     except ConnectionResetError:  # 适用于windows操作系统
    10         break
  • 相关阅读:
    面试热点|理解TCP/IP传输层拥塞控制算法
    mysql中使用存储过程方法中的注意事项
    mysql 游标的使用方法
    php mkdir No such file or director问题
    curl 出现错误的调试方法
    xp与win7双系统时删除win7启动菜单
    退回win7后无法上网 的解决方法
    Windows7安装程序无法定位现有系统分区,也无法创建新的系统分区
    YII 框架在windows系统下的安装
    php 在服务器端开启错误日志记录方法
  • 原文地址:https://www.cnblogs.com/xudachen/p/8723982.html
Copyright © 2011-2022 走看看