python tcp客户端服务器闪退的问题(初级)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python tcp客户端服务器闪退的问题(初级)相关的知识,希望对你有一定的参考价值。

    一句废话:最近学习python核心编程,遇到了运行简单的(有多简单自己看)tcp服务器与客户端黑屏闪退的问题

原因:

>>>from socket import *

>>> help(socket.recv)
Help on method_descriptor:

recv(...)
    recv(buffersize[, flags]) -> data
   
    Receive up to buffersize bytes from the socket.

>>> help(socket.send)
Help on method_descriptor:

send(...)
    send(data[, flags]) -> count
   
    Send a data string to the socket.

因为工作模式为:客户端发送-服务器接收-服务器发送-客户端接收

即客户端发送的数据类型必须符合服务器接收的数据类型,即字节流,表现为

客户端:发送,data.encode(),因为要给服务器接收用

服务器:接收,data.decode(),因为要给服务器send用

服务器:发送,data.encode(),因为要给客户端接收用

客户端:接收,data.decode,因为要显示输出

详细代码如下:

服务器:

from socket import *
from time import ctime
Host=‘‘
Port=3306
BufSIZE=1024
Addr=(Host,Port)
Sst=socket(AF_INET,SOCK_STREAM)
Sst.bind(Addr)
Sst.listen(5)
while True:
    print(‘....Wait Connect....‘)
    Cst,Addr=Sst.accept()
    print(‘....Connect From ‘,Addr,‘....‘)
    while True:
        data=Cst.recv(BufSIZE).decode()
        Cst.send(data.encode())
    Cst.close()
Sst.close()

客户端:

from socket import *
Host=‘localhost‘
Port=3306
BuffSIZE=1024
Addr=(Host,Port)
Cst=socket()
Cst.connect(Addr)
while True:
    data=input(‘>‘).encode()
    Cst.send(data)
    data=Cst.recv(BuffSIZE).decode()
    print(‘>:‘,data)

不足之处,敬请谅解,同时请帮忙指正,不胜感激。

附有如下问题:

1.socket.send()要求是字符串的参数,data.encode()为什么不报错,编码之后指定不是字符串了呀?

2.tcp服务器是个死循环,但是当关闭客户端的时候,它报个异常就退出了,怎么改变?

3.客户端也是个死循环,当服务器关闭的时候他不知道,运行时不报错,怎么让客户端知道,服务器关闭了呢?

 

本文出自 “Python” 博客,请务必保留此出处http://52syc.blog.51cto.com/10591392/1775643

以上是关于python tcp客户端服务器闪退的问题(初级)的主要内容,如果未能解决你的问题,请参考以下文章

MySQL 数据库输入密码后闪退的问题及解决办法

启动tomcat闪退的解决办法

CefGlue在WinXP下闪退的排除方法

Android APP闪退的可能原因和解决方法

求助Lotus Notes 8.5闪退的问题

pyinstaller打包exe文件闪退的解决办法