socket server化

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开始阻塞,等待客户端的响应,再执行客户端。

客户端执行结果:

服务端执行结果:并将该图片下载下来了

参考: socket技术详解(看清socket编程)

猜你喜欢

转载自blog.csdn.net/qq_24946843/article/details/90739783