1、简述socket原理
socket又称套间字或者插口,是网络通信中必不可少的工具。有道是:“无socket,不网络”。由于socket最早在BSD Unix上使用,而Unix/Linux所奉为经典的至高哲学是“一切皆是文件”。因此socket在使用时也是完全符合这个哲学的,它涉及到listen()、bind()、accept()、write()/read()、close()等基本的类似于文件操作的功能函数。
下面大致的按照客户端和服务端将所需的函数详细的列举出来
上面的两个图都概述了socket的通讯原理
2、python中socket server实例
服务端:
# 导入 socket模块
import socket
import urllib.request
# 创建 socket 对象
s = socket.socket()
# 绑定IP地址和端口号
s.bind(("10.202.98.14", 8000)) #本主机地址和端口号
# 设置最大连接数,超过后排队
s.listen(5)
print("等待连接...")
while True:
conn,addr = s.accept() #conn为套接字,addr为Ip地址
print("连接地址: " ,addr)
msg='欢迎访问菜鸟教程!'
conn.sendall(msg.encode('utf-8')) #向客户端发送消息,8位编码格式编码为字节传输
urlByte = conn.recv(1024) #接收客户端的消息
print(urlByte) #接收到的是字节类型
print(urlByte.decode('utf-8'))#对字节进行解码
urlStr = urlByte.decode('utf-8')
urllib.request.urlretrieve(urlStr,"1.jpg") #给了图片网址链接,将图片下载下来
conn.close()#关闭套接字
客户端:
# 导入 socket模块
import socket
import urllib.request
# 创建 socket 对象
s = socket.socket()
# 连接服务,指定IP地址和端口(服务器端的)
s.connect(("10.202.98.14", 8000))
#向服务端发送图片网址链接,编码成字节形式进行发送
s.sendall("http://img.netbian.com/file/20110706/527402dc667609f7ad644c5a51361fdc.jpg".encode('utf-8'))
# 接收小于 1024 字节的数据
msg = s.recv(1024)#接收服务端的消息,接收的是字节类型
s.close()
print (msg.decode('utf-8'))#对字节类型进行解码
先执行服务端,服务端执行到accept开始阻塞,等待客户端的响应,再执行客户端。
客户端执行结果:
服务端执行结果:并将该图片下载下来了