本章将使您对网络-Socket编程中最著名的概念有所了解。
Socket是双向通信通道的端点。Socket可以在一个进程内,同一台机器上的进程之间或不同大陆上的进程之间进行通信。
Socket可以在许多不同的通道类型上实现:Unix域Socket,TCP,UDP等。 socket 库提供用于处理常见传输的特定类以及用于处理其余传输的通用接口。
Socket有自己的词汇表-
Sr.No. | Term & 描述 |
---|---|
1 |
Domain 用作传输机制的协议系列。这些值是常量,如AF_INET,PF_INET,PF_UNIX,PF_X25等。 |
2 |
type 两个端点之间的通信类型,通常是面向连接协议的SOCK_STREAM和无连接协议的SOCK_DGRAM。 |
3 |
protocol 通常为零,可用于标识域和类型内协议的变体。 |
4 |
hostname 网络接口的标识符 |
5 |
port 每台服务器侦听在一个或多个端口上调用的客户端。 |
Socket 模块
要创建Socket,必须使用 socket 模块中提供的 socket.socket()函数,该函数具有以下通用语法:
s=socket.socket (socket_family, socket_type, protocol=0)
这是参数的描述-
socket_family - 如前所述,它是AF_UNIX或AF_INET。
socket_type - 这是SOCK_STREAM或SOCK_DGRAM。
protocol - 通常忽略,默认为0。
一旦有了 socket 对象,就可以使用必需的函数来创建客户端或服务器程序。以下是所需函数的列表-
服务端方法
Sr.No. | Method & 描述 |
---|---|
1 |
s.bind() 此方法将地址(主机名,端口号对)绑定到Socket。 |
2 |
s.listen() 此方法设置并启动TCP侦听器。 |
3 |
s.accept() 这被动地接受TCP客户端连接,等待连接到达(阻塞)。 |
客户端方法
Sr.No. | Method & 描述 |
---|---|
1 |
s.connect() 此方法主动启动TCP服务器连接。 |
通用Socket方法
Sr.No. | Method & 描述 |
---|---|
1 |
s.recv() 该方法接收TCP消息 |
2 |
s.send() 该方法传输TCP消息 |
3 |
s.recvfrom() 此方法接收UDP消息 |
4 |
s.sendto() 此方法传输UDP消息 |
5 |
s.close() 此方法关闭Socket |
6 |
socket.gethostname() 返回主机名。 |
服务器代码
要编写Internet服务器,使用Socket模块中的 socket 函数来创建Socket对象。然后使用Socket对象调用其他函数来设置Socket服务器。
现在调用 bind(hostname,port)函数为给定主机上的服务指定一个 port 。
接下来,调用返回对象的 accept 方法。此方法一直等到客户端连接到您指定的端口,然后返回表示与该客户端的连接的 connection 对象。
#!/usr/bin/python # 这是server.py文件 import socket # 导入socket模块 s=socket.socket() # 创建socket对象 host=socket.gethostname() # 获取本地机器名称 port=12345 # 保留服务端口。 s.bind((host, port)) # 绑定到端口 s.listen(5) # 现在等待客户端连接。 while True: c, addr=s.accept() # 与客户建立联系。 print 'Got connection from', addr c.send('Thank you for connecting') c.close() # 关闭连接
客户端代码
让无涯教程编写一个简单的客户端程序,该程序打开到给定端口12345和给定主机的连接。使用Python socket 模块函数创建Socket客户端非常简单。
socket.connect(hosname,port)打开与 port 上 hostname 的TCP连接。打开Socket后,您可以像读取任何IO对象一样从中读取Socket。完成后,记得关闭它,就像关闭文件一样。
以下代码是一个非常简单的客户端,该客户端连接到给定的主机和端口,从Socket读取任何可用数据,然后退出-
#!/usr/bin/python # 这是client.py文件 import socket # 导入socket模块 s=socket.socket() # 创建socket对象 host=socket.gethostname() # 获取本地机器名称 port=12345 # 保留开放的端口号。 s.connect((host, port)) print s.recv(1024) s.close() # 完成后关闭插座
现在,在后台运行此server.py,然后在client.py上方运行以查看输出。
# 以下将在后台启动服务器。 $python server.py & # 一旦服务器启动运行客户端,如下所示: $python client.py
这将产生以下输出-
Got connection from ('127.0.0.1', 48437) Thank you for connecting
Python 网络模块
Python网络编程中一些重要模块的列表。
协议 | 常用函数 | 端口号 | Python模块 |
---|---|---|---|
HTTP | 网页 | 80 | httplib,urllib,xmlrpclib |
NNTP | Usenet新闻 | 119 | nntplib |
FTP | 文件传输 | 20 | ftplib,urllib |
SMTP | 发送电子邮件 | 25 | smtplib |
POP3 | 获取电子邮件 | 110 | poplib |
IMAP4 | 获取电子邮件 | 143 | imaplib |
Telnet | 命令行 | 23 | telnetlib |
Gopher | 文档传输 | 70 | gopherlib,urllib |
请检查上述所有库,以使用FTP,SMTP,POP和IMAP协议。
参考链接
https://www.learnfk.com/python/python-networking.html
标签:Socket,Python,编程,无涯,TCP,连接,socket,port,客户端 From: https://blog.51cto.com/u_14033984/7241099