Python网络编程简介

本教程将介绍Python中的套接字以及如何使用套接字模块在Python中构建HTTP服务器和客户端。 它还将涵盖Tornado,这是一个Python网络库,非常适合长时间轮询,WebSocket和需要与每个用户建立长期连接的其他应用程序。

什么是插座?

套接字是两个可以相互通信的应用程序之间的链接(可以在一台计算机上本地通信,也可以在不同位置的两台计算机之间远程通信)。

基本上,套接字充当两个实体(即服务器和客户端)之间的通信链接。 服务器将发出客户端请求的信息。 例如,当您访问此页面时,浏览器创建了一个套接字并连接到服务器。

插座模块

为了创建一个套接字,您可以使用socket.socket()函数,其语法非常简单:

import socket
s= socket.socket (socket_family, socket_type, protocol=0)

这是参数的描述:

  • socket_family :代表地址(和协议)家族。 它可以是AF_UNIX或AF_INET。
  • socket_type :表示套接字类型,可以是SOCK_STREAM或SOCK_DGRAM。
  • protocol :这是一个可选参数,通常默认为0。

获取套接字对象之后,可以使用套接字模块中可用的方法根据需要创建服务器或客户端。

创建一个简单的客户端

在开始之前,让我们看一下Python中可用的客户端套接字方法。

  • s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
  • s.connect() :启动TCP服务器连接。

要创建一个新的套接字,首先要导入套接字类的套接字方法。

import socket

接下来,我们将创建一个流(TCP)套接字,如下所示:

stream_socket = socket.socket( socket.AF_INET, socket.SOCK_STREAM )

AF_INET参数指示您正在请求Internet协议(IP)套接字,特别是IPv4。 第二个参数是TCP套接字的传输协议类型SOCK_STREAM 。 此外,您还可以通过指定套接字AF_INET6参数来创建IPv6套接字。

指定服务器。

server = "localhost"

指定我们要与之通信的端口。

port =80

将套接字连接到服务器正在侦听的端口。

server_address = ((host, port))
stream_socket.connect(server_address)

重要的是要注意主机和端口必须是一个元组。

向服务器发送数据请求:

message = 'message'
stream_socket.sendall(message)

从服务器获取响应:

data = sock.recv(10)
print data

要关闭连接的套接字,请使用close方法:

stream_socket.close()

以下是客户端/服务器的完整代码。

import socket
import sys

# Create a TCP/IP socket
stream_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

# Define host
host = 'localhost'

# define the communication port
port = 8080

# Connect the socket to the port where the server is listening
server_address = ((host, port))

print "connecting"

stream_socket.connect(server_address)


# Send data
message = 'message'
stream_socket.sendall(message)

# response
data = stream_socket.recv(10)
print data


print 'socket closed'
stream_socket.close()

建立一个简单的服务器

现在,让我们看一个简单的Python服务器。 以下是Python中可用的套接字服务器方法。

  • s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
  • s.bind() :将地址(主机名,端口号)绑定到套接字。
  • s.listen() :设置并启动TCP侦听器。
  • s.accept() :接受TCP客户端连接。

我们将按照以下步骤操作:

  • 创建一个套接字。
  • 将套接字绑定到端口。
  • 开始接受套接字上的连接。

这是服务器程序。

import socket
import sys

# Create a TCP/IP socket
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

# Define host
host = 'localhost'

# define the communication port
port = 8080

# Bind the socket to the port
sock.bind((host, port))
# Listen for incoming connections
sock.listen(1)

# Wait for a connection
print 'waiting for a connection'
connection, client = sock.accept()

print client, 'connected'

# Receive the data in small chunks and retransmit it

data = connection.recv(16)
print 'received "%s"' % data
if data:

    connection.sendall(data)
else:
    print 'no data from', client


# Close the connection
connection.close()

现在,服务器已准备好进行传入连接。

现在,在单独的终端窗口中运行客户端和服务器程序,以便它们可以相互通信。

服务器输出
$ python server.py 
waiting for a connection
('127.0.0.1', 47050) connected
received "message"
客户输出
$ python client.py 
connecting
message
socket closed

龙卷风框架

Tornado框架是可用于Python网络编程的库之一。 在本节中,我们将讨论该库并显示如何使用它来构建WebSocket。

Tornado是一个Python Web框架和异步网络库。 龙卷风使用非阻塞网络I / O,因此能够扩展到成千上万的开放连接。 此特性使其非常适合长时间轮询,WebSocket和其他需要与每个用户建立长期连接的应用程序。

让我们创建一个简单的Tornado WebSocket:

import tornado.ioloop
import tornado.web


class ApplicationHandler(tornado.web.RequestHandler):

    def get(self):
        self.message = message = """<html>
<head>
    <title>Tornado Framework</title>

</head>
<body
    <h2>Welcome to the Tornado framework</h2>
</body>
</html>"""
        self.write(message)


if __name__ == "__main__":
    application = tornado.web.Application([
        (r"/", ApplicationHandler),
    ])
    application.listen(5001)
    tornado.ioloop.IOLoop.instance().start()

在上面的代码中:

  • 我们定义了类ApplicationHandler ,该类充当请求的处理程序,并使用write()方法返回响应。
  • main方法是程序的入口。
  • tornado.web.Application为Web应用程序创建一个基础,并接受处理程序的集合,即ApplicationHandler。
  • 该应用程序侦听端口5000,并且客户端可以使用相同的端口与此应用程序进行通信。
  • tornado.ioloop.IOLoop.instance().start()为应用程序创建一个非阻塞线程。

如果运行该应用程序,我们将获得如下屏幕截图所示的结果。

The results of running our application

结论

到目前为止,您必须已经掌握了Python套接字编程的基础知识,以及如何构建简单的服务器和客户端。 可以通过构建自己的聊天客户端进行实验。 有关更多信息,请访问官方Python文档。

此外,不要犹豫,看看我们在Envato市场上有哪些可供出售和研究的物品 ,也不要犹豫,使用下面的提要来问任何问题并提供宝贵的反馈意见。

翻译自: https://code.tutsplus.com/tutorials/introduction-to-network-programming-in-python--cms-30459

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值