学科分类
目录

基于TCP的数据转换

TCP数据转换程序位于服务器端,数据转换程序可以接收客户端发来的字符,将其转换为大写后返回给客户端,示意如图1所示。

img

图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的数据转换功能实现成功。

点击此处
隐藏目录