《Python核心编程》第16章 网络编程 练习

16-4. 客户。

修改TCP(tsTclnt.py)和UDP(tsUclnt.py)客户端,让服务器的名字不要在代码里写死,要允许用户指定一个主机名和端口,只有在两个值都没有输入的时候,才使用默认值。

# coding=utf-8
__author__ = 'Ibuki Suika'

from socket import *
from time import ctime

HOST = ''
PORT = 21567
BUF_SIZE = 1024
ADDRESS = (HOST, PORT)

server = socket(AF_INET, SOCK_STREAM)
server.bind(ADDRESS)
server.listen(5)

while True:
    print("waiting for connection...")
    sock, address = server.accept()
    print("...connected from: (%s, %d)" % address)
    while True:
        data = sock.recv(BUF_SIZE)
        if data == "end":
            break
        sock.send("[{0:s}] {1:s}".format(ctime(), data))
    sock.close()
server.close()
# coding=utf-8
__author__ = 'Ibuki Suika'

from socket import *

BUF_SIZE = 1024
host = raw_input('host: ')
port = raw_input('port: ')
if host == '':
    host = '127.0.0.1'
if port == '':
    port = '21567'
address = (host, int(port))

client = socket(AF_INET, SOCK_STREAM)
client.connect(address)
while True:
    data = raw_input('>')
    if not data:
        break
    client.send(data)
    s = client.recv(BUF_SIZE)
    if not s:
        break
    print s
client.close()

# coding=utf-8
__author__ = 'Ibuki Suika'

from socket import *
from time import ctime

HOST = ''
PORT = 21567
BUF_SIZE = 1024
ADDRESS = (HOST, PORT)

server = socket(AF_INET, SOCK_DGRAM)
server.bind(ADDRESS)
while True:
    print("waiting for message...")
    data, address = server.recvfrom(BUF_SIZE)
    server.sendto("[%s] %s" % (ctime(), data), address)
    print("...receoved from and returned to:(%s, %d)" % address)
server.close()

# coding=utf-8
__author__ = 'Ibuki Suika'

from socket import *

BUF_SIZE = 1024
host = raw_input('host: ')
port = raw_input('port: ')
if host == '':
    host = '127.0.0.1'
if port == '':
    port = '21567'
address = (host, int(port))

client = socket(AF_INET, SOCK_DGRAM)
while True:
    data = raw_input('>')
    if not data:
        break
    client.sendto(data, address)
    data, address = client.recvfrom(BUF_SIZE)
    if not data:
        break
    print data
client.close()
16–5. Intenet 网络和套接字。

找到Python Library Reference 中7.2.2 节Guido van Rossum的示例TCP 客户/服务器程序,实现它并让它运行起来。先运行服务器,然后是客户端。源代码的一个在线版本可以在这里找到:

http://www.python.org/doc/current/lib/ Socket_Example.html
你认为这个服务器太无聊了,决定要修改服务器,让它能识别以下命令:

date 服务器将返回它的当前时间 i.e., time.ctime(time.time())

os    得到操作系统的信息(os.name)

ls 得到当前目录的文件列表 (提示: os.listdir()可以得到目录列表,os.curdir 能得到当前目录)

附加题: 要能接受“ls dir”指令,并返回dir 目录的文件列表。

做这个作业的时候,你不一定要有网络——你的机器可以跟自己通讯。注:在服务器退出后,要清除绑定后才能再次运行。否则,有

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值