欢迎访问宙启技术站
智能推送

Python中socket.socket实现网络编程的典型应用场景

发布时间:2024-01-04 05:10:33

Python中的socket模块为网络通信提供了底层的接口,可以实现各种网络编程的应用场景。下面是一些典型的应用场景以及使用例子:

1. 客户端和服务器之间的简单通信

   # 服务器端
   import socket

   server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
   server_socket.bind(('localhost', 9999))
   server_socket.listen(5)

   while True:
       client_socket, address = server_socket.accept()
       data = client_socket.recv(1024).decode('utf-8')
       print('Received from client:', data)
       client_socket.send('Hello, client!'.encode('utf-8'))
       client_socket.close()

   # 客户端
   import socket

   client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
   client_socket.connect(('localhost', 9999))
   client_socket.send('Hello, server!'.encode('utf-8'))
   data = client_socket.recv(1024).decode('utf-8')
   print('Received from server:', data)
   client_socket.close()
   

这个例子中,客户端连接到服务器,并向服务器发送信息。服务器接收到信息后进行处理,并返回响应给客户端。

2. 多线程并发服务器

   # 服务器端
   import socket
   import threading

   def handle_client(client_socket):
       data = client_socket.recv(1024).decode('utf-8')
       print('Received from client:', data)
       client_socket.send('Hello, client!'.encode('utf-8'))
       client_socket.close()

   def start_server():
       server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
       server_socket.bind(('localhost', 9999))
       server_socket.listen(5)

       while True:
           client_socket, address = server_socket.accept()
           threading.Thread(target=handle_client, args=(client_socket,)).start()

   start_server()
   

这个例子中,服务器可以同时处理多个客户端的请求。每当有新的客户端连接时,会创建一个新的线程来处理该客户端的请求。

3. UDP广播和组播

   # 广播
   import socket

   def send_broadcast_message(message, port):
       broadcast_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
       broadcast_socket.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1)
       broadcast_socket.sendto(message.encode('utf-8'), ('<broadcast>', port))
       broadcast_socket.close()

   send_broadcast_message('Hello, world!', 9999)

   # 组播
   import socket

   def send_multicast_message(message, group, port):
       multicast_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
       multicast_socket.setsockopt(socket.IPPROTO_IP, socket.IP_MULTICAST_TTL, 1)
       multicast_socket.sendto(message.encode('utf-8'), (group, port))
       multicast_socket.close()

   send_multicast_message('Hello, world!', '224.0.0.1', 9999)
   

这个例子中,广播和组播是用于在局域网中传输数据的技术。通过socket模块的相应接口,可以方便地发送广播和组播消息。

4. 文件传输

   # 服务器端
   import socket

   def receive_file(file_name, port):
       server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
       server_socket.bind(('localhost', port))
       server_socket.listen(5)

       connection, address = server_socket.accept()
       with open(file_name, 'wb') as file:
           data = connection.recv(1024)
           while data:
               file.write(data)
               data = connection.recv(1024)

       connection.close()
       server_socket.close()

   receive_file('received_file.txt', 9999)

   # 客户端
   import socket

   def send_file(file_name, ip, port):
       client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
       client_socket.connect((ip, port))

       with open(file_name, 'rb') as file:
           data = file.read(1024)
           while data:
               client_socket.send(data)
               data = file.read(1024)

       client_socket.close()

   send_file('file_to_send.txt', 'localhost', 9999)
   

这个例子中,客户端将本地的文件发送给服务器,服务器接收到文件后保存在本地。

这些只是一些典型的应用场景,实际上,根据不同的需求,我们可以使用socket模块来实现各种网络通信的应用。