前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >TCP套接字编程——Python语言描述

TCP套接字编程——Python语言描述

作者头像
zy010101
发布2019-05-25 19:55:00
5790
发布2019-05-25 19:55:00
举报
文章被收录于专栏:程序员程序员

版权声明:本文为博主原创文章,转载请注明博客地址: https://cloud.tencent.com/developer/article/1433335

TCP和UDP不同,它是面向连接的服务。因此,在传输数据之前,必须要先建立连接。当连接一旦建立,那么客户端就可以直接通过该套接字向服务器发送数据。而无需向UDP连接中那样需要指定目的地址。下面我们来看客户端代码。

代码语言:javascript
复制
from socket import *;

server_address = 'localhost';
server_port = 8000;
ADDR = (server_address,server_port);

socket_client = socket(AF_INET,SOCK_STREAM);
socket_client.connect(ADDR);	#建立TCP连接
while True:
	data = input("please input:");
	socket_client.send(data.encode());	 #发送数据
	recv = socket_client.recv(4096);
	print(recv.decode());
socket_client.close();

可以看到,在真正通信之前,必须先建立TCP连接。这需要使用函数connect。需要注意的是在TCP通信中,客户端必须在服务器之后运行,否则connect会失败。(因为无法与服务器建立连接)。连接一旦建立,就可以直接在该连接上进行数据的收发,不需要在指定地址了。

服务器代码:

代码语言:javascript
复制
from socket import *;
server_port = 8000;

server_socket = socket(AF_INET,SOCK_STREAM);
server_socket.bind(('',server_port));
#服务器最大连接2个请求
server_socket.listen(2);
while True:
	print("receive data:");
	data_socket,client_addr = server_socket.accept();		#获取请求方的地址,并创建一个新的套接字data_socket用来接受数据。
	while True:
		data = data_socket.recv(4096).decode();
		print(data);
		data_socket.send(str("success").encode());
	data_socket.close();

服务器在绑定端口以后,对端口进行监听。listen函数来设置服务器最大能接受的请求数量。一旦服务器捕捉到一个请求,那么将会接受该TCP连接的建立。server_socket套接字只是用来监听请求的,不是真正的数据传输套接字。在accept函数捕捉到TCP连接请求以后,建立一个新的用于数据传输的套接字data_socket。客户端和服务器的数据传输就是在该套接字上进行。

借用《计算机网络——自顶向下方法》这本书里面的一幅图来形象的描述TCP连接建立的过程。

三次握手的过程是于欢迎套接字之间进行的,真正的数据传输是在新的套接字上进行的。实质上,套接字就是管道的一个升级版本。只不过管道只能在本机进程之间进行数据传输,套接字能在网络上的主机中进行通信。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019年03月18日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档