python中,通过socket支持三种通信方式:TCP、UDP、unix进程。

  TCP: 先连接,在通信。UDP:不需要连接,直接通信。

  socket 常用方法:blid()、listen()、accept()、connect()、 recv()、sendall()、close()。

  一、基于TCP的secket通信,实现聊天机器人

  1、服务器端

# 创建服务器端socket

import socket
# 创建一个socket对象
sk = socket.socket()
# 绑定本机IP与端口port
# cmd-->ipconfig 查看ip;netstat 查看端口
sk.bind(('192.168.1.103',8088,))
# 监听:后面排队的数量
sk.listen(5)
# 阻塞:等待客户端的访问请求
while True:
    # 始终保持等待被访问,得到:连接和访问客户端的ip与port信息。
    conn,address = sk.accept()
    print(conn,address)
    # 返回:互动信息
    conn.sendall(bytes("欢迎光临",encoding='utf-8'))
    while True:
        # 阻塞:始终保持等待客户端返回信息
        ret = str(conn.recv(1024),encoding='utf-8')
        if ret == 'q':
            break
        # 回复用户信息
        conn.sendall(bytes(ret+"good",encoding='utf-8'))

  2、客户端

# 设置客户端socket,访问服务器

import socket
# 创建对象
obj = socket.socket()
# 访问服务器
obj.connect(('192.168.1.103',8088,))
# 阻塞:等待服务器的返回信息,最多返回1024个字节
receive =str(obj.recv(1024),encoding='utf-8')
print(receive)
# 向服务器发送信息,进行互动
while True:
    # 向服务器发送信息
    message = input("请输入需要发送的信息:\n>>>")
    obj.sendall(bytes(message,encoding='utf-8'))
    if message == 'q':
        # 如果“q”,停止互动。
        break
    else:
        # 否则,继续接受服务器信息。
        ret = str(obj.recv(1024),encoding='utf-8')
        print(ret)
# 关闭访问连接
obj.close()

   二、基于UDP的socket通信(类代码) 

# 基于UDP的socket通信
import socket
# 服务器端
sk = socket.socket()
sk.bind(('192.168.1.103',8080,))
while True:
    ret =str(sk.recv(1024),encoding='utf-8')
    if ret == 'q':
        break
    print(ret)

# 客户端
obj = socket.socket()
while True:
    message = input("请输入需要发送的内容:\n>>>")
    obj.sendto(bytes(message,encoding='utf-8'),('192.168.1.103',8080,))
    if message == 'q':
        break