Python一日一练100----消息服务器

本文介绍如何使用Python创建一个TCP服务器,该服务器在接收到客户端消息时,会在其前面附加当前时间戳。
摘要由CSDN通过智能技术生成

要求:

创建一个TCP服务器,要求:能接收客户的消息,并在消息前加一个时间戳。


服务器端:

# -*- coding: utf-8 -*-                                                       #与#coding=utf-8作用相同
'''
创建一个能接收客户的消息,在消息前加一个时间戳后返回的TCP服务器。
'''
from socket import *
from time import ctime

HOST = ''                                                                     #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-8
from socket import *
import sys                                                                           #由于使用2.*班的的Python,为防止出现编码问题
reload(sys)
sys.setdefaultencoding('utf8')                                                       

HOST = '192.168.1.66'
PORT = 21567
BUFSIZ = 1024
ADDR = (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()


出现的问题与用到的知识点:




欢迎收听我的微信公众号



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值