python 网络编程——客户端
网络通信的基本接口是socket,它扩展了操作系统的基本I/O到网络网络通信。socket可以通过socket()函数来建立,通过connect()函数来连接。得到了socket,可以确定本地和远程端点的IP地址和端口号。socket对不同的协议来说都是一种通用的接口,它可以处理TCP和UDP通信。
建立socket需要两步:建立socket对象、连接到远程服务器上
import socket
print "Creating socket"
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) #指明通信类型和协议家族
print "Done!" print "Connecting to remote host..."
s.connect(("www.baidu.com", 80))
print "Done"
运行结果
Creating socket
Done!
Connecting to remote host...
Done
查找端口号
通过协议名和端口名查找端口号(unix系统可以在etc/services中找到对应的端口号)
import socket
print "Creating socket"
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
print "Done!" print "Looking up port number..."
port = socket.getservbyname("http", "tcp")
print port
print "done!" print "Connecting to remote host..."
s.connect(("www.baidu.com", port))
print "Done!!"
运行结果
Creating socket
Done!
Looking up port number...
80
done!
Connecting to remote host...
Done!!
从socket获得信息
import socket
print "Creating socket"
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
print "Done!" print "Looking up port number..."
port = socket.getservbyname("http", "tcp")
print port
print "done!" print "Connecting to remote host..."
s.connect(("www.baidu.com", port))
print "Done!!" print "Connected from", s.getsockname() #获得本地机器的ip和端口号(端口号由操作系统随机分配,每次都不一样)
print "Connected to", s.getpeername() #获得连接机器的ip和端口号
一次运行结果
Creating socket
Done!
Looking up port number...
80
done!
Connecting to remote host...
Done!!
Connected from ('192.168.209.129', 56245)
Connected to ('220.181.112.244', 80)
利用socket通信
socket对象:send()、sendto()、recv()、recvfrom()
文件类对象:read()、write()、readline()
处理错误
import socket, sys host = sys.argv[1]
textport = sys.argv[2]
filename = sys.argv[3] try:
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
except socket.error, e:
print "Strange error creating socket: %s" % e
sys.exit(1) try:
port = int(textport)
except ValueError:
try:
port = socket.getservbyname(textport, 'tcp')
except socket.error, e:
print "Couldn't find your port: %s" % e
sys.exit(1) try:
s.connect((host, port))
except socket.gaierror, e:
print "Address-related error connecting to server: %s" %e
sys.exit(1)
except socket.error, e:
print "Connection error: %s" %e
sys.exit(1) try:
s.sendall("GET %s HTTP/1.0\r\n\r\n" % filename)
except socket.error, e:
print "Error sending data: %s" %e
sys.exit(1)
print "---------------------------------------" while 1:
try:
buf = s.recv(2048)
except socket.error, e:
print "========Error receving data: %s=======" %e
sys.exit(1)
if not len(buf):
break
sys.stdout.write(buf)
print "---------------------------------------"
改进
#coding: utf-8
import socket
import sys
import time host = sys.argv[1]
textport = sys.argv[2]
filename = sys.argv[3] try:
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
except socket.error, e:
print "Strange error creating socket: %s" % e
sys.exit(1) try:
port = int(textport)
except ValueError:
print "ValueError"
try:
port = socket.getservbyname(textport, 'tcp')
except socket.error, e:
print "Couldn't find your port: %s" % e
sys.exit(1) try:
s.connect((host, port))
except socket.gaierror, e: #主机名不对
print "Address-related error connecting to server: %s" %e
sys.exit(1)
except socket.error, e: #连接远程主机有问题
print "Connection error: %s" %e
sys.exit(1) print "Sleepping........."
time.sleep(10)
print "Continuing." try:
s.sendall("GET %s HTTP/1.0\r\n\r\n" % filename)
except socket.error, e:
print "Error sending data: %s" % e
sys.exit(1) try:
s.shutdown(1)
except socket.error, e:
print "Error sending data (detected by shutdown):%s" % e
sys.exit(1) print "---------------------------------------"
while 1:
try:
buf = s.recv(2048)
print "try"
except socket.error, e:
print "========Error receving data: %s=======" %e
sys.exit(1) if not len(buf): #接受的为空
print "breaK"
break
sys.stdout.write(buf)
print "---------------------------------------"
python 网络编程——客户端的更多相关文章
- Python 网络编程(二)
Python 网络编程 上一篇博客介绍了socket的基本概念以及实现了简单的TCP和UDP的客户端.服务器程序,本篇博客主要对socket编程进行更深入的讲解 一.简化版ssh实现 这是一个极其简单 ...
- Python 网络编程(一)
Python 网络编程 socket通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄,应用程序通常通过"套接字"向网络发出请求或者应答网络请求. ...
- Python学习(22)python网络编程
Python 网络编程 Python 提供了两个级别访问的网络服务.: 低级别的网络服务支持基本的 Socket,它提供了标准的 BSD Sockets API,可以访问底层操作系统Socket接口的 ...
- Day07 - Python 网络编程 Socket
1. Python 网络编程 Python 提供了两个级别访问网络服务: 低级别的网络服务支持基本的 Socket,它提供了标准的 BSD Sockets API,可以访问底层操作系统Socket接口 ...
- python网络编程-01
python网络编程 1.socket模块介绍 ①在网络编程中的一个基本组件就是套接字(socket),socket是两个程序之间的“信息通道”. ②套接字包括两个部分:服务器套接字.客户机套接字 ③ ...
- python 网络编程(Socket)
# from wsgiref.simple_server import make_server## def RunServer(environ,start_response):# start_resp ...
- python 网络编程 IO多路复用之epoll
python网络编程——IO多路复用之epoll 1.内核EPOLL模型讲解 此部分参考http://blog.csdn.net/mango_song/article/details/4264 ...
- Python 网络编程相关知识学习
Python 网络编程 Python 提供了两个级别访问的网络服务.: 低级别的网络服务支持基本的 Socket,它提供了标准的 BSD Sockets API,可以访问底层操作系统Socket接口的 ...
- python 网络编程 TCP/IP socket UDP
TCP/IP简介 虽然大家现在对互联网很熟悉,但是计算机网络的出现比互联网要早很多. 计算机为了联网,就必须规定通信协议,早期的计算机网络,都是由各厂商自己规定一套协议,IBM.Apple和Micro ...
随机推荐
- 20145233《网络对抗》Exp7 DNS网络欺诈技术防范
20145233<网络对抗>Exp7 DNS网络欺诈技术防范 实验问题思考 通常在什么场景下容易受到DNS spoof攻击 公共的无线局域网中,容易受到攻击者的攻击,因为这样就会连入局域网 ...
- docker+selenium Grid搭建自动化分布式测试环境
自动化测试需要考虑到兼容性的时候,之前的做法是每个执行机上安装不同版本的浏览器,实际上这样做会很浪费硬件资源,现在有了docker容器化技术,让一切变得简单. 工具清单: 语言:python 2.7 ...
- vs附加调试
已解决.项目-属性-调试-启用调试器选择启用本机代码调试,不知道怎么的选成启用Visual Studio承载进程了.
- SELinux导致无法访问外网,PHP连接MySQL异常Can't connect to MySQL server、redis程序访问提示Redis server went away的解决方法
今天上班遇到的问题,新配的Linux服务器,php.Apache和一系列扩展插件装好后,在本地好好的程序移上去就一直抱数据库连接错误,而用sql命令却能连接上去, 做了一个简单的判断数据库连接页面还是 ...
- C#面向对象:多态
此文章转载网站:https://www.cnblogs.com/qixinbo/p/8244583.html 多态: 有多态之前必须要有继承,只有多个类同时继承了同一个类,才有多态这样的说法. 在继承 ...
- 2018-12-20 第一章初识JAVA-上机
JAVA初体验之课后练习 一.请写出Java 程序执行过程与编译原理 答:①执行过程:创建.java文件——编译器(JDK环境里的javac.exe文件编译)——输出.class供计算机接受(只有cl ...
- 2018OCP最新题库052新加考题及答案整理-27
27.Examine these facts about a database: 1. USERS is the database default tablespace. 2. USER1, USER ...
- 选项卡tab2
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- “全栈2019”Java第十九章:关系运算符、条件运算符和三元运算符
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...
- nginx负载均衡配合keepalived服务案例实战
本实验用4台 centos6 虚拟机,2台做负载均衡,2台做web服务器,都先装上nginx lb01:192.168.0.235 --主负载均衡器 lb02:192.168.0.236 --备负 ...