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"
复制代码

运行结果

1
2
3
4
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!!"
复制代码

运行结果

1
2
3
4
5
6
7
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和端口号
复制代码

一次运行结果

1
2
3
4
5
6
7
8
9
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 "---------------------------------------"
复制代码

 





本文转自jihite博客园博客,原文链接:http://www.cnblogs.com/kaituorensheng/p/4505284.html,如需转载请自行联系原作者


相关文章
|
6月前
|
运维 监控 数据可视化
Python 网络请求架构——统一 SOCKS5 接入与配置管理
通过统一接入端点与标准化认证,集中管理配置、连接策略及监控,实现跨技术栈的一致性网络出口,提升系统稳定性、可维护性与可观测性。
|
9月前
|
机器学习/深度学习 算法 量子技术
GQNN框架:让Python开发者轻松构建量子神经网络
为降低量子神经网络的研发门槛并提升其实用性,本文介绍一个名为GQNN(Generalized Quantum Neural Network)的Python开发框架。
221 4
GQNN框架:让Python开发者轻松构建量子神经网络
|
8月前
|
机器学习/深度学习 算法 安全
【PSO-LSTM】基于PSO优化LSTM网络的电力负荷预测(Python代码实现)
【PSO-LSTM】基于PSO优化LSTM网络的电力负荷预测(Python代码实现)
389 0
|
6月前
|
机器学习/深度学习 大数据 关系型数据库
基于python大数据的青少年网络使用情况分析及预测系统
本研究基于Python大数据技术,构建青少年网络行为分析系统,旨在破解现有防沉迷模式下用户画像模糊、预警滞后等难题。通过整合多平台亿级数据,运用机器学习实现精准行为预测与实时干预,推动数字治理向“数据驱动”转型,为家庭、学校及政府提供科学决策支持,助力青少年健康上网。
|
7月前
|
JavaScript Java 大数据
基于python的网络课程在线学习交流系统
本研究聚焦网络课程在线学习交流系统,从社会、技术、教育三方面探讨其发展背景与意义。系统借助Java、Spring Boot、MySQL、Vue等技术实现,融合云计算、大数据与人工智能,推动教育公平与教学模式创新,具有重要理论价值与实践意义。
|
8月前
|
运维 Linux 开发者
Linux系统中使用Python的ping3库进行网络连通性测试
以上步骤展示了如何利用 Python 的 `ping3` 库来检测网络连通性,并且提供了基本错误处理方法以确保程序能够优雅地处理各种意外情形。通过简洁明快、易读易懂、实操性强等特点使得该方法非常适合开发者或系统管理员快速集成至自动化工具链之内进行日常运维任务之需求满足。
557 18
|
9月前
|
JSON 网络安全 数据格式
Python网络请求库requests使用详述
总结来说,`requests`库非常适用于需要快速、简易、可靠进行HTTP请求的应用场景,它的简洁性让开发者避免繁琐的网络代码而专注于交互逻辑本身。通过上述方式,你可以利用 `requests`处理大部分常见的HTTP请求需求。
708 51
|
10月前
|
JSON 中间件 Go
Go 网络编程:HTTP服务与客户端开发
Go 语言的 `net/http` 包功能强大,可快速构建高并发 HTTP 服务。本文从创建简单 HTTP 服务入手,逐步讲解请求与响应对象、URL 参数处理、自定义路由、JSON 接口、静态文件服务、中间件编写及 HTTPS 配置等内容。通过示例代码展示如何使用 `http.HandleFunc`、`http.ServeMux`、`http.Client` 等工具实现常见功能,帮助开发者掌握构建高效 Web 应用的核心技能。
486 61
|
7月前
|
机器学习/深度学习 算法 PyTorch
【Pytorch框架搭建神经网络】基于DQN算法、优先级采样的DQN算法、DQN + 人工势场的避障控制研究(Python代码实现)
【Pytorch框架搭建神经网络】基于DQN算法、优先级采样的DQN算法、DQN + 人工势场的避障控制研究(Python代码实现)
198 1
|
7月前
|
机器学习/深度学习 算法 PyTorch
【DQN实现避障控制】使用Pytorch框架搭建神经网络,基于DQN算法、优先级采样的DQN算法、DQN + 人工势场实现避障控制研究(Matlab、Python实现)
【DQN实现避障控制】使用Pytorch框架搭建神经网络,基于DQN算法、优先级采样的DQN算法、DQN + 人工势场实现避障控制研究(Matlab、Python实现)
318 0

推荐镜像

更多
下一篇
开通oss服务