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