python tcp、udp

本文提供了TCP和UDP通信的基本示例代码,包括服务端和客户端的实现方式。通过这些示例,读者可以了解如何使用Python进行简单的网络编程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

TCP


服务端:

import socket

s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
s.bind(('127.0.0.1',12345))
s.listen(1)#等待连接的最大的数目
while True:
    msg,addr=s.accept()
    while True:        
        recv=msg.recv(1024)
        if len(recv)>0:
            msg.send('ok!')
        else:
            break
        print recv
msg.close()

客户端:

import socket

s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
s.connect(('127.0.0.1',12345))
s.send('1')
recv=s.recv(1024)
print recv    
s.close() 

UDP

服务端:

from socket import *  
  
HOST = '127.0.0.1'  
PORT = 1112  
  
s = socket(AF_INET,SOCK_DGRAM)  
s.bind((HOST,PORT))  
print '...waiting for message..'  
while True:  
    data,address = s.recvfrom(1024)  
    print data
    s.sendto('OK',address)  
s.close()  
 

客户端:

from socket import *  
  
HOST='127.0.0.1'  
PORT=1112
  
s = socket(AF_INET,SOCK_DGRAM)  
s.connect((HOST,PORT))  
while True:  
    message = raw_input('send message:>>')  
    s.sendall(message)  
    data = s.recv(1024)  
    print data  
s.close()  


### PythonTCPUDP协议的实现 #### TCP通信基础 在Python中,`socket`模块支持TCP/IP协议栈中的传输层功能。通过该模块可以创建基于TCP的客户端和服务端程序。以下是常见的TCP通信函数及其作用: - `socket.socket()`:用于创建一个新的套接字对象。 - `.bind(address)`:绑定地址到套接字上。 - `.listen(backlog)`:监听传入连接请求。 - `.accept()`:接受一个连接并返回新的套接字文件描述符以及远程主机地址。 - `.connect(address)`:主动发起与目标机器之间的连接。 下面展示了一个简单的TCP服务端示例代码[^2]: ```python import socket def tcp_server(): server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) server_socket.bind(('localhost', 9999)) server_socket.listen(5) while True: client_socket, addr = server_socket.accept() data = client_socket.recv(1024).decode('utf-8') print(f"Received from {addr}: {data}") response = f"ECHO: {data}" client_socket.send(response.encode('utf-8')) client_socket.close() tcp_server() ``` 对于TCP客户端,则可以通过`.connect()`方法向指定的服务端发送连接请求,并利用`.sendall()`发送数据给对方[^3]: ```python import socket def tcp_client(): client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) client_socket.connect(('localhost', 9999)) message = 'Hello Server!' client_socket.sendall(message.encode('utf-8')) data = client_socket.recv(1024).decode('utf-8') print(f"Server Response: {data}") client_socket.close() tcp_client() ``` #### UDP通信基础 相比TCP而言,UDP属于无连接型协议,在实际应用过程中不需要经历三次握手过程即可直接传递消息包。因此其具有较低延迟特性但也缺乏错误检测机制[^4]。 这里给出一段关于如何构建基本形式下的UDP收发器实例[^1]: ```python import socket def udp_server(): server_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) server_socket.bind(('localhost', 8888)) while True: data, address = server_socket.recvfrom(1024) print(f"Received from {address}: {data.decode('utf-8')}") response = f"ECHO: {data.decode('utf-8')}" server_socket.sendto(response.encode('utf-8'), address) udp_server() ``` 而相应的UDP客户机只需要调用`.sendto()`就能把信息投递给特定的目的地节点;与此同时还能借助于`.recvfrom()`接收来自任何地方的数据报文片段: ```python import socket def udp_client(): client_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) message = 'Hello UDP Server!' client_socket.sendto(message.encode('utf-8'), ('localhost', 8888)) data, _ = client_socket.recvfrom(1024) print(f"Server Response: {data.decode('utf-8')}") client_socket.close() udp_client() ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值