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

版权声明:本文为博主原创文章,转载请注明博客地址: https://blog.csdn.net/zy010101/article/details/88649682

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

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会失败。(因为无法与服务器建立连接)。连接一旦建立,就可以直接在该连接上进行数据的收发,不需要在指定地址了。

服务器代码:

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连接建立的过程。

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

猜你喜欢

转载自blog.csdn.net/zy010101/article/details/88649682