多线程 : socket

    socket()函数用于根据指定的地址族、数据类型和协议来分配一个套接口的描述字及其所用的资源。如果协议protocol未指定(等于0),则使用缺省的连接方式。

    对于使用一给定地址族的某一特定套接口,只支持一种协议。但地址族可设为AF_UNSPEC(未指定),这样的话协议参数就要指定了。协议号特定于进行通讯的“通讯域”。        <<----引自百度百科 (0.o)

 

服务器程序(多线程+Socket编程)、高并发

简单 “智能 ”(0.o) 机器人代码

服务端:

from socket import *
import threading
#问题库:

questionDict={'你好':'你好','贵庚了':'吃饭了','我问你贵庚了':'吃的炸酱面','我把你吹的呼囔呼囔的':'你把我摔的嘌叽嘌叽的',
         '让你干东':'我干西','让你打狗':'我撵鸡','落霞与孤鹜齐飞':'秋水共长天一色','哀吾生之须臾':'羡长江之无穷',
         '我爱你':'我也爱你'}
#智能问答机器人服务器
class RobotServer():

    def __init__(self,ip='127.0.0.1',port=8080,connectSize=100):
        '''

        :param port: 服务器的端口号
        :param connectSize:默认的并发数量
        '''
        self.__ip=ip
        self.__port=port
        self.__connectSize=connectSize
        pass

    def startServer(self):
        '''
        服务器启动主程序
        :return:
        '''
        server=socket(AF_INET,SOCK_STREAM)
        server.setsockopt(SOL_SOCKET,SO_REUSEADDR,1)
        server.bind((self.__ip,self.__port))
        server.listen(self.__connectSize)
        while True:
            clientConn,clientAddr=server.accept()
            #定义独立的线程,处理每一个用户请求   nio
            wt=WorkThread(clientConn,clientAddr)
            wt.start()
            pass
        pass
    pass


class WorkThread(threading.Thread):
    def __init__(self,connection,addr,bufferSize=8099):
        threading.Thread.__init__(self)
        self.__connection=connection
        self.__addr=addr
        self.__bufferSize=bufferSize
    def run(self):
        #while True:    #保持长连接
        receiveMsg=self.__connection.recv(self.__bufferSize)
        receiveMsg=receiveMsg.decode('utf-8')
        answer=''
        for temp in questionDict.keys():
            if temp.count(receiveMsg)>0:
                answer=questionDict[temp]
                break
                pass
            pass
        if not answer:
            answer='你说啥'
        self.__connection.send(answer.encode('utf-8'))
        self.__connection.close()
        pass
    pass

if __name__=="__main__":
    rs=RobotServer()
    rs.startServer()
    pass

客户端:

import socket
from socket import *

class RobotClient():

    def __init__(self,ip ='10.0.14.204',port=8080):
        self.__ip = ip
        self.__port = port
        self.__bufferSize =8099
        pass

    def  startSendMsg(self,msg):
        client = socket(AF_INET,SOCK_STREAM)
        client.connect((self.__ip,self.__port))
        client.send("index.html".encode("utf-8"))
        receive = client.recv(self.__bufferSize)
        print(receive.decode("utf-8"))
        client.close()
        pass
    pass


if __name__=="__main__":
    rc=RobotClient()
    while True:
        msg=input('你说我答:')
        rc.startSendMsg(msg)
    pass

                                                                                                                                                                                                                                    end

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值