python核心编程学习笔记-2016-08-28-02-习题18-6

原创 2016年08月28日 16:11:50

        习题18-6

服务器

#-*-coding: utf-8-*-

# 参考网上的思路,服务器端主线程仍然是监视连接,新建两个线程,一个用来接收信息,另外一个用来接收信息。

from socket import *
import threading
from time import ctime

HOST = '' 
PORT = 21567 
BUFSIZ = 1024 
ADDR = (HOST, PORT)

def read(tcpCliSock):
    while True:
        rdata = tcpCliSock.recv(BUFSIZ)
        if not rdata:
            break
        print rdata

def write(tcpCliSock):
    while True:
        sdata = raw_input('> ')
        if not sdata:
            break
        tcpCliSock.send(sdata)

tcpSerSock = socket(AF_INET, SOCK_STREAM)
tcpSerSock.bind(ADDR) 
tcpSerSock.listen(5) 

while True:
    print "waiting for connection..." 
    tcpCliSock, addr = tcpSerSock.accept() 
    print "...connected from:", addr
    
    
    r = threading.Thread(target=read, args=(tcpCliSock,)) # 接收信息线程
    r.setDaemon(True) # 把接收信息线程设为守护线程,让主线程得以继续监视连接
    r.start()
    
    s = threading.Thread(target=write, args=(tcpCliSock,)) # 发送消息线程
    s.setDaemon(True) # 同上,把发送消息线程也设为守护线程,让主线程得以继续监视连接
    s.start()
        
tcpCliSock.close()     
客户端

#-*-coding: utf-8-*-

# 客户端的思路不同,因为客户端只面对一个服务器,所以主线程可以选择为接受信息,而新建一个线程用来发送信息

import threading
from socket import *

HOST = 'localhost' 
PORT = 21567 
BUFSIZ = 1024 
ADDR = (HOST, PORT) 

def write(tcpCliSock):
    while True:
        sdata = raw_input('> ')
        if not sdata:
            break
        tcpCliSock.send(sdata)

tcpCliSock = socket(AF_INET, SOCK_STREAM)
tcpCliSock.connect(ADDR) 

t = threading.Thread(target=write, args=(tcpCliSock,)) # 发送信息线程
t.setDaemon(True) # 将发送信息线程设为守护线程,让主线程得以接受来自服务器的信息
t.start()
    
while True:
    rdata = tcpCliSock.recv(1024)
    if not rdata:
        break
    print rdata

tcpCliSock.close()



版权声明:本文为博主原创文章,未经博主允许不得转载。

《Python核心编程》第8章 习题

8–2. 循环.  编写一个程序, 让用户输入三个数字: (f)rom, (t)o, 和 (i)ncrement . 以 i为步长, 从 f 计数到 t , 包括 f 和 t . 例如, 如果输入...
  • birdzb
  • birdzb
  • 2015年09月19日 23:22
  • 1157

<Python核心编程(第二版)>第八章练习题

1. 条件语句. 请看下边代码:  # statement A  if x > 0:      # statement B      pass  elif x 0:      # stat...
  • qq_20113327
  • qq_20113327
  • 2017年03月10日 18:02
  • 203

python核心编程第三版课后习题一

自学的python,水平有限,欢迎评论指正。 1-1: 识别出以下字符串 import re patt='^(bat|bit|but|hat|hit|hut)' data='bat' re.mat...
  • android_zhujinwei
  • android_zhujinwei
  • 2017年01月04日 14:43
  • 2209

python 核心编程2 第十三章练习

'''对类进行定制。写一个类,用来将浮点数值转换为金额。在本练习里,我们使用美国 货币,但读者也可以自选任意货币。 基本任务: 编写一个dollarize()函数,它以一个浮点数值作为输入,返回一个字...
  • mingyuezhao01
  • mingyuezhao01
  • 2017年06月11日 18:33
  • 233

《python核心编程第二版》第五章练习解析

1. 普通整形即标准整形是最通用的数字类型。它的取值范围是-2**31 ~~ 2**31-1,也就是-2 147 483 648 ~~ 2 147 483 647。python的长整形与C或其他编译...
  • u013938528
  • u013938528
  • 2015年04月25日 10:05
  • 1098

Python核心编程(第三版)课后习题解答——第四章

Python核心编程(第三版),课后习题解答,第四章。所有的解答均为博主自行编写,因水平有限,欢迎大家提出意见、互相交流。 4-1. 进程和线程的区别是什么? 进程是一个执行中的程序。每个进程都拥有...
  • zkk12345
  • zkk12345
  • 2017年07月05日 22:48
  • 715

《Python核心编程》第6章 习题

6-2. 字符串标识符.修改例 6-1 的 idcheck.py 脚本,使之可以检测长度为一的标识符,并且可以识别 Python 关键字,对后一个要求,你可以使用 keyword 模块(特别是 key...
  • birdzb
  • birdzb
  • 2015年08月26日 23:50
  • 2414

《Python核心编程》第11章 习题

11-2 函数。结合你对练习5-2的解,以便你创建一个带一对相同数字并同时返回它们之和以及产物的结合函数。 fun=lambda x,y:x+y print fun(1,3) 11-3 函数...
  • birdzb
  • birdzb
  • 2016年01月22日 16:15
  • 2868

《Python核心编程》第14章 习题

14-3.执行环境。创建运行其他Python脚本的脚本。 filename = r'D:\test.py' execfile(filename)14-4. os.system()。调用os.sy...
  • birdzb
  • birdzb
  • 2017年04月01日 20:28
  • 482

Python核心编程笔记

Python解释器从头到尾一行接一行执行脚本 # -*- coding: UTF-8 -*-    //字符编码 不区分单引号和双引号,x=’hello’,x[0],x[-1]指最后一个字符,x[...
  • liuxuejiang158
  • liuxuejiang158
  • 2014年03月19日 14:14
  • 2274
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:python核心编程学习笔记-2016-08-28-02-习题18-6
举报原因:
原因补充:

(最多只允许输入30个字)