大多数连接都是可靠的TCP连接,创建TCP连接时,主动发起的连接叫客户端,被动响应连接的叫做服务器
#导入socket库
import socket
# AF_INET指定使用IPv4协议,如果使用更先进的IPv6协议,就指定AF_INET6
# SOCK_STREAM 指定使用面向流的TCP协议
# 目前一个socket对象就创建成功,但是还没有建立连接
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
# 80 端口时web服务的标准端口,SMTP服务是25端口,FTP服务是21端口
s.connect(('www.sina.com.cn', 80))
# 发送数据,建立TCP连接后,客户端向新浪服务器发送请求,要求返回首页的内容
s.send(b'GET / HTTP/1.1\r\nHost: www.sina.com.cn\r\nConnection: close\r\n\r\n')
# 接收数据,recv(max) 方法,一次最多接收指定的字节数,因此,在一个while循环中反复接收,直到recv() 返回空数据,表示接收完毕,退出循环
buffer = []
while True:
# 每次最多接收1k字节:
d = s.recv(1024)
if d:
buffer.append(d)
else:
break
data = b''.join(buffer)
# 关闭连接,接收完数据之后,关闭socket,一次完整的网络通信就结束了
s.close()
# 接收到的数据包括HTTP头和网页本身,只需要把HTTP头和网页分离一下,把HTTP头打印出来,网页内容保存到文件
header, html = data.split(b'\r\n\r\n', 1)
print(header.decode('utf-8'))
# 把接收的数据写入文件:
with open('sina.html', 'wb') as f:
f.write(html)
网友评论