视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
python中socket实现TCP通信的介绍(附示例)
2020-11-27 14:11:41 责编:小采
文档


本篇文章给大家带来的内容是关于python中socket实现TCP通信的介绍(附示例),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。

TCP

TCP(Transmission Control Protocol 传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议,由IETF的RFC 793定义。在简化的计算机网络OSI模型中,它完成第四层传输层所指定的功能,用户数据报协议(UDP)是同一层内 [1] 另一个重要的传输协议。在因特网协议族(Internet protocol suite)中,TCP层是位于IP层之上,应用层之下的中间层。不同主机的应用层之间经常需要可靠的、像管道一样的连接,但是IP层不提供这样的流机制,而是提供不可靠的包交换。

下面是socket实现TCP通信的示意图,我们根据示意图来编写程序

TCP服务端

服务器进程首先要绑定一个端口并监听来自其他客户端的连接。 如果某个客户端连接过来了, 服务器就与该客户端建立Socket连接, 随后的通信就靠这个Socket连接了。

我们来编写一个简单的服务器程序, 它接收客户端连接,回复客户端发来的请求。

import socket
server = socket.socket()
server.bind(('192.168.1.165',00))
#调用 listen() 方法开始监听端口, 传入的参数指定等待连接的最大数量
server.listen(4)
serObj,address = server.accept()
#当有客户端访问时,实现两边的交流,如果有一方退出,整个程序退出。
#服务器程序通过一个永久循环来接受来自客户端的连接
#这里虽然给出最大连接数为4,但单线程程序也只会响应一个连接
while True:
#建立连接后,服务端等待客户端发送的数据,实现通信
 re_data = serObj.recv(1024).decode('utf-8')
 print('client>>',re_data)
 if re_data == 'quit':
 break
 send_data = input('server>>')
 serObj.send(send_data.encode('utf-8'))
 if send_data == 'quit':
 break
serObj.close()
server.close()

TCP客户端

大多数连接都是可靠的TCP连接。 创建TCP连接时, 主动发起连接的叫客户端, 被
动响应连接的叫服务器。

举个例子, 当我们在浏览器中访问新浪时, 我们自己的计算机就是客户端, 浏览器会主动向新浪的服务器发起连接。 如果一切顺利, 新浪的服务器接受了我们的连接, 一个TCP连接就建立起来的, 后面的通信就是发送网页内容了。

客户端要主动发起TCP连接, 必须知道服务器的IP地址和端口号。

import socket
client = socket.socket()
client.connect(('192.168.1.165',00))
while True:
 send_data = input("client>>")
 client.send(send_data.encode('utf-8'))
 if send_data == 'quit':
 break
 re_data = client.recv(1024).decode('utf-8')
 if re_data == 'quit':
 break
 print("server>>",re_data)

client.close()

用一个窗口运行客户端、另一个窗口运行服务端,可以更直观看见效果。
这里我的08_pra.py是服务端程序,09_pra.py是客户端程序

刚建立连接时的示意图

一次通信完成的示意图

下载本文
显示全文
专题