热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

python在线编程实现_Python进阶开发之网络编程,socket实现在线聊天机器人

系列文章本文目录.什么是socket?说到网络编程,难免要提到socket?那什么是socket呢,中文名叫套接字&#x

系列文章

本文目录

.什么是socket?

说到网络编程,难免要提到socket?

那什么是socket呢,中文名叫"套接字",更难理解了吧。

通俗来讲,socket表示一个网络连接,通过这个连接,使得主机间或者一台计算机上的进程间可以通讯。

不管是不同主机,还是同一主机。既然是通信,必定有一个发送方,一个接收方。对应一个客户端,和一个服务端。

.创建socket客户端

创建socket,建立连接

import socket

# 指定IPv4协议(AF_INET),IPv6协议请使用AF_INET6

# 指定使用TCP协议(SOCK_STREAM),UDP协议请使用SOCK_DGRAM

# 参数是一个tuple,tuple里指定服务器地址(域名或ip)和端口号

'www.sina.com.cn', 80))

发送数据

# 注意这里str格式要遵循HTTP协议标准。

# 注意结尾一定要用 \r\n\r\n

"GET / HTTP/1.1\r\nHost: www.sina.com.cn\r\n\r\n".encode("utf-8"))

接收数据

while True:

# 每次最多接收1k字节

1024)

if d:

# Python3接收到为bytes类型,要转为str

else:

break

''.join(buffer)

.创建socket服务端

创建socket

import socket

绑定ip和port

# 注意以元组格式传入,可以是某网卡的公网ip,或0.0.0.0,或127.0.0.1

'127.0.0.1', 9999))

监听端口

# 指定等待连接的最大数量

5)

接收数据

while True:

# 接受一个新连接,阻塞的,只有接收到新连接才会往下走

# 每一次连接,都要创建新线程,否则一次只能处理一个连接

连接处理函数

def tcplink(sock, addr):

while True:

1024)

if data == 'exit' or not data:

break

'Hello, %s!' % data)

.socket工作流程图解

.socket公共函数汇总

发送数据

# 发送TCP数据,返回值:发送的字节当量

"data string")

# 完整发送TCP数据,频繁调用send方法,确保数据发送完成

"data string")

# 发送UDP数据

"data string",address)

接收数据

# 接收TCP数据,一次最大只接收1k数据

1024)

# 接收UDP数据,一次只接收1k数据,返回值:数据和发送方ip

1024)

获取socket信息

# 获取远程socket的addr,port

# 获取本地socket的addr,port

获取其他信息

import socket

# 获取当前主机名

# 获取当前主机的ip

# 获取当前socket连接的文件描述符

设置socket

# 设置连接的超时时间

# 设置为非阻塞模式,默认是0(阻塞)

# 非阻塞下,accept和recv时一旦无数据,则报错:socket.Error

1)

# 设置socket内部参数,

# 具体有哪些参数,可以查看socket类的python源码

.实战:搭建在线聊天机器人

通过上面的学习,我们知道,同主机下或不同主机下的两个进程要进行通信(TCP/UDP,不管是消息传输还是文件传输),必定要借助socket这个桥梁。

那接下来,我们就一起来完成这个实战项目:在线聊天机器人。

思路:首先,客户端和服务端建立socket连接,然后客户端向服务端发送消息,服务端接收消息,并调用 图灵机器人API接口,获取回复返回给客户端。

在这里,我们需要先去图灵机器人(http://www.tuling123.com)申请帐号,并创建机器人应用,获取授权码。

一切准备就绪,就可以写我们的代码了。

客户端

import socket

import time

class ChatClient:

def __init__(self, username, port):

"127.0.0.1", port))

def send_msg(self, msg):

"{username}::{msg}".format(username=self.username,msg=msg).encode("utf-8"))

def recv_msg(self):

1024)

if data:

"\n【机器人小图】"+" "+time.strftime('%Y-%m-%d:%H:%M:%S',time.localtime(time.time())))

"utf-8"))

return True

return False

def main(self):

1024)

"utf-8"))

"请输入消息:")

while True:

if self.recv_msg():

"\n我:")

if msg == "exit":

"聊天室已关闭")

break

if __name__ == '__main__':

"小明", port=9999)

服务端

import socket

import time

import threading

import requests

import json

class ChatServer:

def __init__(self, port):

# 绑定服务器的ip和端口,注意以tuple的形式

"0.0.0.0", port))

5)

# 图灵机器人,授权码

"your tuling robot key"

"正在监听 127.0.0.1 :{}...".format(port))

def tcplink(self, sock, addr):

# 每次连接,开始聊天前,先欢迎下。

"你好,欢迎来到机器人聊天器!".encode("utf-8"))

while True:

1024).decode("utf-8")

"::")[0]

"::")[1]

if msg == "exit":

break

if msg:

"【"+username+"】 "+time.strftime('%Y-%m-%d:%H:%M:%S',time.localtime(time.time())))

"utf-8"))

"与 {} 结束聊天!".format(username))

def get_response(self, info):

# 调用图灵机器人API

'http://www.tuling123.com/openapi/api?key=' + self.key + '&info=' + info

'utf-8'

return jd['text']

def main(self):

while True:

if __name__ == '__main__':

9999)

将服务端程序跑起来,然后运行客户端,看下效果。

至此,我们看到我们机器人已经正常和我们调侃。



推荐阅读
  • 基于Socket的多个客户端之间的聊天功能实现方法
    本文介绍了基于Socket的多个客户端之间实现聊天功能的方法,包括服务器端的实现和客户端的实现。服务器端通过每个用户的输出流向特定用户发送消息,而客户端通过输入流接收消息。同时,还介绍了相关的实体类和Socket的基本概念。 ... [详细]
  • 本文介绍了Python高级网络编程及TCP/IP协议簇的OSI七层模型。首先简单介绍了七层模型的各层及其封装解封装过程。然后讨论了程序开发中涉及到的网络通信内容,主要包括TCP协议、UDP协议和IPV4协议。最后还介绍了socket编程、聊天socket实现、远程执行命令、上传文件、socketserver及其源码分析等相关内容。 ... [详细]
  • 本文介绍了在mac环境下使用nginx配置nodejs代理服务器的步骤,包括安装nginx、创建目录和文件、配置代理的域名和日志记录等。 ... [详细]
  • iOS超签签名服务器搭建及其优劣势
    本文介绍了搭建iOS超签签名服务器的原因和优势,包括不掉签、用户可以直接安装不需要信任、体验好等。同时也提到了超签的劣势,即一个证书只能安装100个,成本较高。文章还详细介绍了超签的实现原理,包括用户请求服务器安装mobileconfig文件、服务器调用苹果接口添加udid等步骤。最后,还提到了生成mobileconfig文件和导出AppleWorldwideDeveloperRelationsCertificationAuthority证书的方法。 ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • web.py开发web 第八章 Formalchemy 服务端验证方法
    本文介绍了在web.py开发中使用Formalchemy进行服务端表单数据验证的方法。以User表单为例,详细说明了对各字段的验证要求,包括必填、长度限制、唯一性等。同时介绍了如何自定义验证方法来实现验证唯一性和两个密码是否相等的功能。该文提供了相关代码示例。 ... [详细]
  • 解决nginx启动报错epoll_wait() reported that client prematurely closed connection的方法
    本文介绍了解决nginx启动报错epoll_wait() reported that client prematurely closed connection的方法,包括检查location配置是否正确、pass_proxy是否需要加“/”等。同时,还介绍了修改nginx的error.log日志级别为debug,以便查看详细日志信息。 ... [详细]
  • mac php错误日志配置方法及错误级别修改
    本文介绍了在mac环境下配置php错误日志的方法,包括修改php.ini文件和httpd.conf文件的操作步骤。同时还介绍了如何修改错误级别,以及相应的错误级别参考链接。 ... [详细]
  • 树莓派语音控制的配置方法和步骤
    本文介绍了在树莓派上实现语音控制的配置方法和步骤。首先感谢博主Eoman的帮助,文章参考了他的内容。树莓派的配置需要通过sudo raspi-config进行,然后使用Eoman的控制方法,即安装wiringPi库并编写控制引脚的脚本。具体的安装步骤和脚本编写方法在文章中详细介绍。 ... [详细]
  • 本文介绍了Swing组件的用法,重点讲解了图标接口的定义和创建方法。图标接口用来将图标与各种组件相关联,可以是简单的绘画或使用磁盘上的GIF格式图像。文章详细介绍了图标接口的属性和绘制方法,并给出了一个菱形图标的实现示例。该示例可以配置图标的尺寸、颜色和填充状态。 ... [详细]
  • SpringMVC接收请求参数的方式总结
    本文总结了在SpringMVC开发中处理控制器参数的各种方式,包括处理使用@RequestParam注解的参数、MultipartFile类型参数和Simple类型参数的RequestParamMethodArgumentResolver,处理@RequestBody注解的参数的RequestResponseBodyMethodProcessor,以及PathVariableMapMethodArgumentResol等子类。 ... [详细]
  • 从Oracle安全移植到国产达梦数据库的DBA实践与攻略
    随着我国对信息安全和自主可控技术的重视,国产数据库在党政机关、军队和大型央企等行业中得到了快速应用。本文介绍了如何降低从Oracle到国产达梦数据库的技术门槛,保障用户现有业务系统投资。具体包括分析待移植系统、确定移植对象、数据迁移、PL/SQL移植、校验移植结果以及应用系统的测试和优化等步骤。同时提供了移植攻略,包括待移植系统分析和准备移植环境的方法。通过本文的实践与攻略,DBA可以更好地完成Oracle安全移植到国产达梦数据库的工作。 ... [详细]
  • Python操作MySQL(pymysql模块)详解及示例代码
    本文介绍了使用Python操作MySQL数据库的方法,详细讲解了pymysql模块的安装和连接MySQL数据库的步骤,并提供了示例代码。内容涵盖了创建表、插入数据、查询数据等操作,帮助读者快速掌握Python操作MySQL的技巧。 ... [详细]
  • 本文介绍了使用数据库管理员用户执行onstat -l命令来监控GBase8s数据库的物理日志和逻辑日志的使用情况,并强调了对已使用的逻辑日志是否及时备份的重要性。同时提供了监控方法和注意事项。 ... [详细]
  • OpenMap教程4 – 图层概述
    本文介绍了OpenMap教程4中关于地图图层的内容,包括将ShapeLayer添加到MapBean中的方法,OpenMap支持的图层类型以及使用BufferedLayer创建图像的MapBean。此外,还介绍了Layer背景标志的作用和OMGraphicHandlerLayer的基础层类。 ... [详细]
author-avatar
热情连心锁426
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有