微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用 tcp/ip 时处理异常

如何解决使用 tcp/ip 时处理异常

下面是一个工作应用程序的片段:

for i in range(10):
    html_text = requests.get(url,params={'pi': str(i)}).text
    soup = BeautifulSoup(html_text,'lxml')
    print(soup.contents)
    products = soup.find_all("div",{"class": "p-card-wrppr"})
    for product in products:
        product_id = product['data-id']
        product_name = product.find("div",{"class": "prdct-desc-cntnr-ttl-w two-line-text"}).find("span",{"class": "prdct-desc-cntnr-name"})["title"]
        price = product.find_all("div",{"class": "prc-Box-sllng"})[0].text
        cursor.execute("INSERT INTO products VALUES (?,?,?)",(product_id,product_name,price))
        print(product_id,price)
    db.commit()
    db.close()

这是一个非常简单的 TCP/IP 客户端/服务器。它从客户端接收消息(在这种情况下,来自 android 应用程序)并将接收到的消息发送回(到客户端)。然而,很明显,网络中的任何操作都与错误的出现相关联,这些错误很容易导致此应用程序崩溃,并且必须再次运行。例如:

import net

class TcpReceiver :
  task_     := null
  
  constructor _port:
    task_ = task:: receiveTcp _port
 
  receiveTcp listenPort :
    network_interface := net.open
    while true :
      waitingTcpMessage network_interface listenPort
    print "<<<<<<< receiveTcp EXIT >>>>>>>"  

sendMessage interface clientAddress/string port/int text/string :
  clientSocket :=  interface.tcp_connect clientAddress port
  clientSocket.write "$clientAddress:$text"
  clientSocket.close

waitingTcpMessage interface port/int :
  serverSocket := interface.tcp_listen port
  print ("Waiting for a TCP message ...")
  socket := serverSocket.accept
  data := socket.read
  clientAddr := socket.peer_address.ip.stringify
  print ("[$clientAddr]->[$data.to_string]")
  sendMessage interface clientAddr port "[$data.to_string]"
  serverSocket.close

main :

  TcpReceiver 1234

处理此类错误的最简单方法是使用诸如try..catch..finally 之类的结构。但是为此,您至少需要知道哪些函数能够抛出异常。在这种情况下,只有两个这样的操作是显而易见的:socket.readsocket.write。它们可以用 try..finally 包裹,没问题。但问题仍然存在:这些是唯一需要这种保护的操作,还是其他操作? TOIT 上最安全的 TCP/IP 客户端/服务器应该是什么样子的(即使像这里这样的功能最少)?

预先感谢您的回答,MK。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。