基于python的tcp服务器

支持用户命令行登录并且支持多线程


使用的数据库为mysql5.0

服务器代码:

Server.py:

# * coding:utf-8 -*-
from socket import *
from time import ctime
import PDBC
import threading
import ServiceThread

HOST = ''  # 主机
PORT = 8002 # 端口号,可以随意选择
BUFSIZ = 4096
ADDR = (HOST, PORT) #主机端口号组成一个套接字地址

tcpSerSock = socket(AF_INET, SOCK_STREAM) #创建一个套接字对象,是AF_INET族的tcp套接字
tcpSerSock.bind(ADDR) #这个函数用于绑定地址到套接字
tcpSerSock.listen(5) # 服务器开始监听连接,参数表示最多允许同时有几个连接进来
def jonny(client, address):
    count = 0
    password = ''
    username = ''
    while True:
        data = client.recv(BUFSIZ)  # 用于接收从客户端发来的数据 参数代表一次最多接受的数据量,这里为1k
        if not data:
            break
        if count == 0:
            username = data
        if count == 1:
            password = data
            if password == PDBC.login(username):
                client.send('登陆成功,请选择你接下来的的操作:')
            if password != PDBC.login(username) or PDBC.login(username) == False:
                print client.send('登录失败')
        if count > 1:
            print "客户端发来操作代码:", data
            client.send('[%s] %s' % (ctime(), data))  # 将时间戳作为内容发送给客户端
        count += 1
    client.close()
while True:
    print ctime()+':等待客户端接入'
    client, address = tcpSerSock.accept() #用于等待连接的到来
    thread = threading.Thread(target=jonny, args=(client, address))
    thread.start()

# print '客户端接入'
#     count = 0
#     password = ''
#     username = ''
#     while True:
#         data = client.recv(BUFSIZ) #用于接收从客户端发来的数据 参数代表一次最多接受的数据量,这里为1k
#         if not data:
#             break
#         if count == 0:
#             username = data
#         if count == 1:
#             password = data
#             if password == PDBC.login(username):
#                 client.send('登陆成功,请选择你接下来的的操作:')
#             if password != PDBC.login(username) or PDBC.login(username) == False:
#                 print client.send('登录失败')
#         if count > 1:
#             print "客户端发来操作代码:",data
#             client.send('[%s] %s' % (ctime(), data)) # 将时间戳作为内容发送给客户端
#         count += 1
客户端代码:client.py:

# * coding:utf-8 -*-
from socket import *

print "初始化客户端配置"
HOST = 'localhost' #由于服务器开设在自己电脑上,所以主机是本地
PORT = 8002 #同一个连接端口
BUFSIZ = 1024
ADDR = (HOST, PORT)
print "开始连接服务器"
tcpCliSock = socket(AF_INET, SOCK_STREAM) #同样的TCP套接字
tcpCliSock.connect(ADDR) # 连接相应的地址,初始化TCP服务器的连接
print "连接成功,请登录"
print "输入用户名:"
username = raw_input()
tcpCliSock.send(username)
print "输入密码:"
password = raw_input()
tcpCliSock.send(password)
resp = tcpCliSock.recv(BUFSIZ)
print resp
print "1.查看文件列表"
print "2.上传文件"
print "3.下载文件"
while True:
    data = raw_input('>')
    if not data:
        break
    tcpCliSock.send(data) # 向服务器传输数据
    data = tcpCliSock.recv(BUFSIZ) # 接受服务器端的数据
    if not data:
        break
    print data

tcpCliSock.close()
数据库连接模块:PDBC.py:

# * coding:utf-8 -*-
import mysql.connector

def login(username):
    conn = mysql.connector.connect(user='root', password='123456', database='bookhouse', use_unicode=True)
    cursor = conn.cursor()
    cursor.execute('select userPassword from userinfo where userName= %s ',(username,))
    values = cursor.fetchall()
    cursor.close()
    conn.close()
    if values.__len__() == 0:
        return False
    else:return values[0][0]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值