Python基础-TCP编程初识
2017-12-22 23:24
337 查看
TCP/IP简介
IP协议
IP协议负责把数据从一台计算机通过网络发送到另一台计算机。数据被分割成一小块一小块,然后通过IP包发送出去。由于互联网链路复杂,两台计算机之间经常有多条线路,因此,路由器就负责决定如何把一个IP包转发出去。IP包的特点是按块发送,途径多个路由,但不保证能到达,也不保证顺序到达。IP地址
IP地址实际上是一个32位整数(称为IPv4),以字符串表示的IP地址如192.168.0.1实际上是把32位整数按8位分组后的数字表示,目的是便于阅读。IPv6地址
IPv6地址实际上是一个128位整数,它是目前使用的IPv4的升级版,以字符串表示类似于TCP协议
TCP协议则是建立在IP协议之上的。TCP协议负责在两台计算机之间建立可靠连接,保证数据包按顺序到达。TCP协议会通过握手建立连接,然后,对每个IP包编号,确保对方按顺序收到,如果包丢掉了,就自动重发。一个TCP报文除了包含要传输的数据外,还包含源IP地址和目标IP地址,源端口和目标端口。
端口
端口有什么作用?在两台计算机通信时,只发IP地址是不够的,因为同一台计算机上跑着多个网络程序。一个TCP报文来了之后,到底是交给浏览器还是QQ,就需要端口号来区分。每个网络程序都向操作系统申请唯一的端口号,这样,两个进程在两台计算机之间建立网络连接就需要各自的IP地址和各自的端口号。一个进程也可能同时与多个计算机建立链接,因此它会申请很多端口。
访问新浪首页
运行示例#!/usr/bin/env python3 # -*- coding: utf-8 -*- # Python基础 TCP 编程 import socket # AF_INET 使用IPv4协议,SOCK_STREAM指定使用面向流的TCP协议 s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 建立连接 80端口是Web服务的标准端口 s.connect(("www.sina.com.cn", 80)) # 向新浪服务器发送数据请求 s.send(b'GET / HTTP/1.1\r\nHost: www.sina.com.cn\r\nConnection: close\r\n\r\n') # 接收数据: buffer = [] while True: # 每次最多接收1k字节: d = s.recv(1024) if d: buffer.append(d) else: break data = b''.join(buffer) # 关闭连接: s.close() # 解析数据 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)
运行结果
<!DOCTYPE html> <!-- [ published at 2017-12-22 23:15:11 ] --> <html> <head> <meta http-equiv="Content-type" content="text/html; charset=utf-8" /> <meta http-equiv="X-UA-Compatible" content="IE=edge" /> <title>新浪首页</title> <meta name="keywords" content="新浪,新浪网,SINA,sina,sina.com.cn,新浪首页,门户,资讯" /> <meta name="description" content="新浪网为全球用户24小时提供全面及时的中文资讯,内容覆盖国内外突发新闻事件、体坛赛事、娱乐时尚、产业资讯、实用信息等,设有新闻、体育、娱乐、财经、科技、房产、汽车等30多个内容频道,同时开设博客、视频、论坛等自由互动交流空间。" /> <link rel="mask-icon" sizes="any" href="//www.sina.com.cn/favicon.svg" color="red"> <meta name="stencil" content="PGLS000022" /> <meta name="publishid" content="30,131,1" /> <meta name="verify-v1" content="6HtwmypggdgP1NLw7NOuQBI2TW8+CfkYCoyeB8IDbn8=" /> <meta name="360-site-verification" content="63349a2167ca11f4b9bd9a8d48354541" /> <meta name="application-name" content="新浪首页"/> <meta name ="msapplication-T .......................
相关文章推荐
- Python基础-TCP编程
- Py修行路 python基础 (十四)递归 及 面向对象初识及编程思想
- python网络编程基础(连载)03 socket-tcp
- Python基础教程之tcp socket编程详解及简单实例
- python 网络编程基础学习笔记(1)-网络客户端-socket
- python 基础之初识
- python天天进步(6)--网络编程之数据传输TCP
- python网络编程基础-卷1-(1,8)章
- Python 14.2 TCP编程
- python--编程基础--if 条件
- Python socket编程基础
- 网络编程基础:使用TCP连接
- Python学习日志20150717-Python核心编程基础教程之Python运算符、运算符优先级、表达式简介
- 网络编程基础(一)——使用TCP
- Python中的TCP编程,实现客户端与服务器的聊天(socket)
- linux 网络编程基础(一)(tcp)
- python网络编程基础
- python中的TCP编程学习
- python基础(七)——网络编程
- Python基础:09函数式编程