码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2016-05-21 16:08:54      阅读:543      评论:0      收藏:0      [点我收藏+]

标签:tcp   python   客户   

    一句废话:最近学习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客户端服务器闪退的问题(初级)

标签:tcp   python   客户   

原文地址:http://52syc.blog.51cto.com/10591392/1775643

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!