Python一日一练100----消息服务器
来源:互联网 发布:statistic软件教学 编辑:程序博客网 时间:2024/05/01 05:43
要求:
创建一个TCP服务器,要求:能接收客户的消息,并在消息前加一个时间戳。
服务器端:
# -*- coding: utf-8 -*- #与#coding=utf-8作用相同'''创建一个能接收客户的消息,在消息前加一个时间戳后返回的TCP服务器。'''from socket import *from time import ctimeHOST = '' #HOST 变量为空,表示 bind()函数可以绑定在所有有效的地址上。 PORT = 1234 #选用了一个随机生成的未被占用的端口号。BUFSIZ = 1024 #缓冲的大小设定为 1K,实际情况可以根据需要修改ADDR =(HOST,PORT)tcpSerSock = socket(AF_INET, SOCK_STREAM) tcpSerSock.bind(ADDR) #将套接字绑定到服务器的地址上tcpSerSock.listen(5) #listen()函数的参数只是表示最多允许多少个连接同时连进来,后来的连接就会被拒绝掉。 '''在进入到服务器的无限循环后,我们(被动地)等待连接的到来。当有连接时,我们进入对话循环,等待客户发送数据。如果消息为空,表示客户已经退出,那就再去等待下一个客户的连接。得到客户的消息后,我们在消息前加一个时间戳然后返回。最后一行不会被执行到,放在这里用于提醒读者,在服务器要退出的时候,要记得调用 close()函数。'''while True: print('waiting for connection...') tcpCliSock,addr = tcpSerSock.accept() print('...connected form:',addr) break while True: data = tcpCliSock.recv(BUFSIZ).decode("UTF-8") #将收到的信息解码 if not data: break data=(data+" "+ctime()).encode("utf-8") #信息发送前需编码 tcpCliSock.send(data)tcpCliSock.close()tcpSerSock.close()
客户端
#coding=utf-8from socket import *import sys #由于使用2.*班的的Python,为防止出现编码问题reload(sys)sys.setdefaultencoding('utf8') HOST = '192.168.1.66'PORT = 21567BUFSIZ = 1024ADDR = (HOST,PORT) tcpCliSock = socket(AF_INET,SOCK_STREAM) #创建TCP 客户套接字(tcpCliSock)tcpCliSock.connect(ADDR) #链接服务器'''HOST 和 PORT 变量表示服务器的主机名与端口号。由于我们在同一台电脑上进行测试,所以 HOST里放的是本机的主机名(如果你的服务器运行在其它电脑上,要做相应的修改)。端口号要与服务器上的设置完全相同(不然就没办法通讯)。缓冲区的大小还是设为 1K。'''while True: ''' 客户端也有一个无限循环,客户端的循环在以下两个条件的任意一个发生后就退出:用户没有输入任何内容,或服务器由于某种原因退出,导致 recv()函数失败。否则,在一般情况下,客户端会把用户输入的字符串发给服务器进行处理,然后接收并显示服务器传回来的,加了时间戳的字符串。 ''' data = raw_input("发给主机的话:").encode("UTF-8") #由于服务器使用的是2.*版本的Python,因此不能使用input() if not data: break tcpCliSock.send(data) data = tcpCliSock.recv(BUFSIZ).decode("UTF-8") if not data: break print (data) tcpCliSock.close()
出现的问题与用到的知识点:
Python疑难杂症01----"no encoding declared 错误"解决方法
Python疑难杂症02----解决UnicodeDecodeError: 'ascii' codec can't decode byte 0xe6 in position 0
Python菜鸟晋级02----Python3的bytes与str
Python菜鸟晋级04----raw_input() 与 input()的区别
欢迎收听我的微信公众号
1 0
- Python一日一练100----消息服务器
- Python一日一练01----字符输出
- Python一日一练02----诗词生成器
- Python一日一练03----输出网页
- Python一日一练07----冒泡排序
- Python一日一练08----鸡尾酒排序
- Python一日一练09----奇偶排序
- Python一日一练10----快速排序
- Python一日一练11----选择排序
- Python一日一练12----堆排序
- Python一日一练13----插入排序
- Python一日一练14----希尔排序
- Python一日一练15----归并排序
- Python一日一练16----折半查找
- VC学习一日一练(2)---MFC中自定义消息
- Python一日一练03----一元二次方程的计算
- Python一日一练103----Django模版练习
- Python一日一练104----Django URLconf练习
- .py文件和.sh文件
- 成员初始化
- android ANR
- 深入理解Stata的week()函数
- 关于printf
- Python一日一练100----消息服务器
- Atmel ARM9启动流程与Bootstrap的大小内幕
- spring:quartz 简单例子
- ubuntu设置无线网络
- 每天一个linux命令(5):rm 命令
- Android开发之使用URL访问网络资源
- 高速总线之一:XAUI 接口
- 3g android4 移植 飞思卡尔i.MX 6Quad Android 4.2.2的中兴和Ublox 3G驱动移植 Android——4.2 - 3G移植之路之 reference-ril .p
- ubuntu14.04 无线热点开启