python 网络编程:TCP

在python2.7中完好运行:

#!/usr/bin/python
# -*- coding: utf-8 -*-

# 导入socket库:
import socket
# 创建一个socket:
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 建立连接:
s.connect(('www.sina.com.cn', 80))
s.send('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 = ''.join(buffer)
print (data)

# 关闭连接:
s.close()

运行结果:

HTTP/1.1 200 OK
Server: nginx
Date: Mon, 30 Jul 2018 15:27:31 GMT
Content-Type: text/html
Content-Length: 569784
Connection: close
Last-Modified: Mon, 30 Jul 2018 15:24:01 GMT
Vary: Accept-Encoding
X-Powered-By: shci_v1.03
Expires: Mon, 30 Jul 2018 15:28:06 GMT
Cache-Control: max-age=60
Age: 14
Via: http/1.1 gwbn.guangzhou.ha2ts4.26 (ApacheTrafficServer/6.2.1 [cHs f ]), http/1.1 gwbn.shanghai.ha2ts4.19 (ApacheTrafficServer/6.2.1 [cHs f ])
X-Via-Edge: 1532964451960c86fc48b09010e7c77e64765
X-Cache: HIT.19
X-Via-CDN: f=edge,s=gwbn.shanghai.ha2ts4.18.nb.sinaedge.com,c=139.196.111.200;f=Edge,s=gwbn.shanghai.ha2ts4.19,c=124.14.1.18

<!DOCTYPE html>
<!-- [ published at 2018-07-30 23:24:00 ] -->
<html>
<head>
:
:

在python3中运行出错:

运行结果:

Traceback (most recent call last):
  File "/usercode/file.py", line 16, in <module>
    s.send('GET / HTTP/1.1\r\nHost: www.sina.com.cn\r\nConnection: close\r\n\r\n')
TypeError: 'str' does not support the buffer interface

这是因为python3对字符串做了更改,使得默认字符串编码与python2.7的不同。

所以,使用client_socket.send(data)时,将其替换为client_socket.send(data.encode())。
当使用data = client_socket.recv(512)获取数据时,请将其替换为data = client_socket.recv(512).decode()

更改后的程序为:

#!/usr/bin/python
# -*- coding: utf-8 -*-

# 导入socket库:
import socket
# 创建一个socket:
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)  
# 建立连接:
s.connect(('www.sina.com.cn', 80))
s.send(('GET / HTTP/1.1\r\nHost: www.sina.com.cn\r\nConnection: close\r\n\r\n').encode())   ####添加.encode

# 接收数据:
buffer = []
while True:
    # 每次最多接收1k字节:
    d = s.recv(1024).decode("utf8","ignore")  #######添加.decode("utf8","ignore")
    if d:
        buffer.append(d)
    else:
        break
data = ''.join(buffer)
print (data)

# 关闭连接:
s.close()

运行结果:

HTTP/1.1 200 OK
Server: nginx
Date: Mon, 30 Jul 2018 16:00:02 GMT
Content-Type: text/html
Content-Length: 569807
Connection: close
Last-Modified: Mon, 30 Jul 2018 15:57:02 GMT
Vary: Accept-Encoding
X-Powered-By: shci_v1.03
Expires: Mon, 30 Jul 2018 16:00:35 GMT
Cache-Control: max-age=60
Age: 31
Via: http/1.1 gwbn.guangzhou.ha2ts4.26 (ApacheTrafficServer/6.2.1 [cHs f ]), http/1.1 gwbn.shanghai.ha2ts4.19 (ApacheTrafficServer/6.2.1 [cHs f ])
X-Via-Edge: 1532966402856de110e6a09010e7c4a141492
X-Cache: HIT.19
X-Via-CDN: f=edge,s=gwbn.shanghai.ha2ts4.19.nb.sinaedge.com,c=106.14.17.222;f=Edge,s=gwbn.shanghai.ha2ts4.19,c=124.14.1.19

<!DOCTYPE html>
<!-- [ published at 2018-07-30 23:57:00 ] -->
<html>
:
:

原文地址:http://blog.51cto.com/13502993/2152391

时间: 2024-08-30 02:10:05

python 网络编程:TCP的相关文章

python网络编程——TCP

<pre name="code" class="python"> 一.网络通信模式 对于网络通信,现在遵循的是TCP/IP协议组. 而现在设计的通信模式中,主要使用的是客户端/服务器编程,所谓的客户端就是我们用户所用的软件,而服务端则是程序开发人员根据客户端的需要设计的服务模式,为了是满足客户端的要求,实现和客户端进行正常通信. 二.套接字:通信的端点 对于tcp/Ip协议来说,它是一个多层协议族,分别是物理层,数据链路层,网络层,传输层,应用层.对于网

python网络编程 - tcp

网络编程 低级别的网络服务 高级别的网络服务 socket又称“套接字”,应用程序通过“套接字”向网络发出请求或者应答网络请求,使主机间或者一台计算机上的进程间可以通讯. python代码实现 服务端 流程 1.socket创建一个套接字 2.bind绑定ip和port 3.listen 使套接字变为可以被动链接(默认创建的套接字是主动去链接别人的) 4.accept 等待客户端的链接(accept和客户端的connect是一对,服务器的accept只响应客户端的connect) 5.send/

python网络编程-TCP协议中的三次握手和四次挥手(图解)

建立TCP需要三次握手才能建立,而断开连接则需要四次握手.整个过程如下图所示: 先来看看如何建立连接的. 首先Client端发送连接请求报文,Server段接受连接后回复ACK报文,并为这次连接分配资源.Client端接收到ACK报文后也向Server段发生ACK报文,并分配资源,这样TCP连接就建立了. 那如何断开连接呢?简单的过程如下: [注意]中断连接端可以是Client端,也可以是Server端. 假设Client端发起中断连接请求,也就是发送FIN报文.Server端接到FIN报文后,

[Python 网络编程] TCP Client (四)

TCP Client 客户端编程步骤: 创建socket对象 连接到服务端的ip和port,connect()方法 传输数据 使用send.recv方法发送.接收数据 关闭连接,释放资源 最简单的客户端: #TCP Client客户端 import socket client = socket.socket() client.connect(('127.0.0.1',9999)) client.send("Hi, I'm client1.".encode()) client.close

Python网络编程—TCP套接字之HTTP传输

HTTP协议 (超文本传输协议) 1.用途 : 网页获取,数据的传输 2.特点: 应用层协议,传输层使用tcp传输 简单,灵活,很多语言都有HTTP专门接口 无状态,协议不记录传输内容 http1.1 支持持久连接,丰富了请求类型 3.网页请求过程 客户端(浏览器)通过tcp传输,发送http请求给服务端 服务端接收到http请求后进行解析 服务端处理请求内容,组织响应内容 服务端将响应内容以http响应格式发送给浏览器 浏览器接收到响应内容,解析展示 HTTP请求(request) 1.请求行

python 网络编程 (二)---tcp

异常 python的socket模块实际上定义了4种可能出现的异常: 1)与一般I/O 和通信问题有关的socket.error; 2)与查询地址信息有关的socket.gaierror; 3)与其他地址错误有关的socket.herror; 4)与在一个socket上调用settimeout()后,处理超时有关的socket.timeout; import socket, sys, time host = sys.argv[1] textport = sys.argv[2] filename

[python] 网络编程之套接字Socket、TCP和UDP通信实例

很早以前研究过C#和C++的网络通信,参考我的文章: C#网络编程之Tcp实现客户端和服务器聊天 C#网络编程之套接字编程基础知识 C#网络编程之使用Socket类Send.Receive方法的同步通讯 Python网络编程也类似.同时最近找工作笔试面试考察Socket套接字.TCP\UDP区别比较多,所以这篇文章主要精简了<Python核心编程(第二版)>第16章内容.内容包括:服务器和客户端架构.套接字Socket.TCP\UDP通信实例和常见笔试考题. 最后希望文章对你有所帮助,如果有不

python网络编程,通过服务名称和会话类型(tcp,udp)获取端口号,简单的异常处理

作为一个php程序员,同时有对网络方面感兴趣,php就比较蛋疼了,所以就抽了些时间看python 之前学python基础因为工作原因,断断续续的看了个基础,差不多是可以写代码了 最近在看<python网络编程基础>,准备是边实践边学习了,对书上的一个例子做了个复制 cli下运行的代码 1 #! /usr/bin/env python 2 # -*- coding:utf-8 -*- 3 # ^设置编码:代码中有中午会导致编译错误 4 5 # 引入socket,sys模块 6 import so

Python网络编程02/基于TCP协议的socket简单的通信

目录 Python网络编程02/基于TCP协议的socket简单的通信 1.昨日内容回顾 2.socket 2.1 socket套接字 2.2 基于TCP协议的socket简单通信 Python网络编程02/基于TCP协议的socket简单的通信 1.昨日内容回顾 1.单播:单独联系某一个人 2.广播:给所有人发送消息(群发) 3.比特流:bit就是0101跟水流一样的源源不断的发送01010101 4.以太网协议:将数据进行分组:一组称之为一帧,数据报 head|data head:18字节:

Python 网络编程

Python 提供了两个级别访问的网络服务.: 低级别的网络服务支持基本的 Socket,它提供了标准的 BSD Sockets API,可以访问底层操作系统Socket接口的全部方法. 高级别的网络服务模块 SocketServer, 它提供了服务器中心类,可以简化网络服务器的开发. 什么是 Socket? Socket又称"套接字",应用程序通常通过"套接字"向网络发出请求或者应答网络请求,使主机间或者一台计算机上的进程间可以通讯. socket()函数 Pyt