python中的socket网络编程(一)

python中的socket网络编程(一)

1、网络编程

Socket 是进程间通信的一种方式,它与其他进程间通信的一个主要不同是:它能实现不同主机间的进程间通信,我们网络上各种各样的服务大多都是基于 Socket 来完成通信的,例如我们每天浏览网页、QQ 聊天、收发 email 等等。要解决网络上两台主机之间的进程通信问题,首先要唯一标识该进程,在 TCP/IP 网络协议中,就是通过 (IP地址,协议,端口号) 三元组来标识进程的,解决了进程标识问题,就有了通信的基础了。
  TCP 是一种面向连接的传输层协议,TCP Socket 是基于一种 Client-Server 的编程模型,服务端监听客户端的连接请求,一旦建立连接即可以进行传输数据。那么对 TCP Socket 编程的介绍也分为客户端和服务端。下面我们看下客户端的实现。

2、具体实现

创建socket:

首先要创建 socket,用 Python 中 socket 模块的函数 socket 就可以完成:

#-*- coding: utf-8 -*-
import socket
s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
print 'socket Created' 

函数 socket.socket 创建一个 socket,返回该 socket 的描述符,将在后面相关函数中使用。该函数带有两个参数如下:

  • Address Family:可以选择 AF_INET(用于 Internet 进程间通信) 或者 AF_UNIX(用于同一台机器进程间通信)
  • Type:套接字类型,可以是 SOCKET_STREAM(流式套接字,主要用于 TCP 协议)或者SOCKET_DGRAM(数据报套接字,主要用于 UDP 协议)

错误处理:

如果创建 socket 函数失败,会抛出一个 socket.error 的异常,需要捕获。

# -*- coding: utf-8 -*-
import socket
import sys
#创建套接字,创建失败时会抛出一个 socket.error 的异常,需要捕获
try:
	s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
except socket.error,msg:
	print 'Failed to create socket. Error code: '+ str(msg[0]) + ' ,Error 	message : ' + msg[1]
	sys.exit();
print 'socket Created'

连接服务器:

socket 使用 (IP地址,协议,端口号) 来标识一个进程,那么我们要想和服务器进行通信,就需要知道它的 IP地址以及端口号。

Python 提供了一个简单的函数 socket.gethostbyname 来获得远程主机的 IP 地址:

#获取服务器IP地址
host = 'www.baidu.com'
port = 80
try:
	remote_ip = socket.gethostbyname( host )
except socket.gaierror:
	#could not resolve
	print 'Hostname could not be resolved. Exiting'
	sys.exit()  
print 'Ip address of ' + host + ' is ' + remote_ip

使用连接函数 connect 连接到该 IP 的某个特定的端口上了,下面例子连接到 80 端口上(是 HTTP 服务的默认端口):

#连接服务器
s.connect((remote_ip , port))
print 'Socket Connected to ' + host + ' on ip ' + remote_ip

发送数据:

例如发送字符串GET / HTTP/1.1\r\n\r\n,这是一个 HTTP 请求网页内容的命令。

#发送数据
message = "GET / HTTP/1.1\r\n\r\n"
try :
	#Set the whole string
	s.sendall(message)
except socket.error:
	#Send failed
	print 'Send failed'
	sys.exit()
print 'Message send successfully'

接收数据:

#接受服务器反馈的数据
reply = s.recv(4096)
print reply

关闭socket:

当我们不想再次请求服务器数据时,可以将该 socket 关闭,结束这次通信。

#关闭套接字

时,可以将该 socket 关闭,结束这次通信。

#关闭套接字
s.close()

运行结果:
  
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JdsfA4F3-1593526521125)(http://odsh9s4s2.bkt.clouddn.com/client-return.png)]

3、总结

python网络编程客户端,我们需要经过如下五步:

  • 创建socket
  • 连接到服务器
  • 发送数据
  • 接收数据
  • 关闭socket

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

敲代码的雪糕

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值