基于TCP的数据转换
TCP数据转换程序位于服务器端,数据转换程序可以接收客户端发来的字符,将其转换为大写后返回给客户端,示意如图1所示。
图1 TCP数据转换
TCP数据转换程序的具体实现如下:
import socket
def main():
# 1.创建套接字server_socket
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 2.绑定地址
server_socket.bind(("", 5678))
# 3.设置最大连接数
server_socket.listen(5)
# 4.创建连接
client_socket, address = server_socket.accept()
print('-----TCP数据转换器-----')
while True:
# 5.接收数据
recv_info = client_socket.recv(1024).decode('gb2312')
string_address = address[0] + ':' + str(address[1])
print(string_address)
print("待处理数据:%s" % recv_info)
# 6.数据处理
if recv_info:
data = recv_info.upper()
client_socket.send(data.encode('gb2312'))
print("处理结果:%s"%data)
else:
print('exit')
client_socket.close()
break
# 7.关闭套接字server_socket
server_socket.close()
if __name__ == '__main__':
main()
为了测试该程序的功能,下面实现一个用于发送数据和接收数据处理结果的客户端程序,客户端程序代码如下。
import socket
def main():
# 1.创建套接字client_socket
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 2.请求连接
client_socket.connect(('172.16.43.31', 5678))
# 3.发送数据
while True:
data = input("-----待处理数据------\n")
client_socket.send(data.encode('gb2312'))
recv_info = client_socket.recv(1024).decode('gb2312')
print("------处理结果-------\n%s" % recv_info)
# 4.关闭套接字client_socket
client_socket.close()
if __name__ == '__main__':
main()
启动TCP数据转换程序,终端并没有数据打印。之后启动TCP客户端程序,TCP数据转换器和TCP客户端程序的终端中打印的信息分别如下:
(1)TCP数据转换程序终端
-----TCP数据转换器-----
(2)TCP客户端程序的终端
-----待处理数据------
此时,TCP客户端程序处于等待用户输入数据的状态,TCP数据转换程序处于阻塞等待客户端发送数据的状态。向客户端的终端中输入“hello itheima”后,两端中显示的信息分别如下:
(1)TCP数据转换程序终端
172.16.43.31:13142
待处理数据:hello itheima
处理结果:HELLO ITHEIMA
(2)TCP客户端程序的终端
-----待处理数据------
hello itheima
------处理结果-------
HELLO ITHEIMA
再次向客户端终端中输入数据,数据转换程序将继续处理新的数据,并将处理结果返回到客户端中。由此可知,基于TCP的数据转换功能实现成功。