服务器端:
#!/usr/bin/python # -*- coding: UTF-8 -*- import socket # 导入 socket 模块 s = socket.socket() # 创建 socket 对象 host = socket.gethostname() # 获取本地主机名 port = 12345 # 设置端口 s.bind((host, port)) # 绑定端口 s.listen(5) # 等待客户端连接 while True: c, addr = s.accept() # 建立客户端连接。 print ('连接地址:', addr) st = '欢迎访问XX的博客主页' c.send(st) c.close()
客户端:
#!/usr/bin/python # -*- coding: UTF-8 -*- import socket # 导入 socket 模块 s = socket.socket() # 创建 socket 对象 host = socket.gethostname() # 获取本地主机名 port = 12345 # 设置端口好 s.connect((host, port)) d = s.recv(1024) print(d) s.close()
运行后报错:TypeError: a bytes-like object is required, not 'str'
错误原因:python3.5和Python2.7在套接字返回值解码上有区别。 我用的是python3.5的版本,所以在套接字数据解码上应该使用encode和decode来处理。
更正后,服务器端:
#!/usr/bin/python # -*- coding: UTF-8 -*- import socket # 导入 socket 模块 s = socket.socket() # 创建 socket 对象 host = socket.gethostname() # 获取本地主机名 port = 12345 # 设置端口 s.bind((host, port)) # 绑定端口 s.listen(5) # 等待客户端连接 while True: c, addr = s.accept() # 建立客户端连接。 print ('连接地址:', addr) st = '欢迎访问XX的博客主页' c.send(st.encode()) c.close()
客户端:
#!/usr/bin/python # -*- coding: UTF-8 -*- import socket # 导入 socket 模块 s = socket.socket() # 创建 socket 对象 host = socket.gethostname() # 获取本地主机名 port = 12345 # 设置端口好 s.connect((host, port)) d = s.recv(1024) print(d.decode()) s.close()
服务器端运行结果:
客户端运行结果: