python multiprocessing socket server example

本文提供了一个使用 Python 的 socket 库实现客户端与服务器间基本通信的示例。客户端发送数据到本地主机的一个指定端口,服务器接收这些数据并将其回传给客户端。通过多进程处理,服务器能够同时处理多个客户端连接。

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

       
import socket
 
if __name__ == "__main__" :
sock = socket . socket ( socket . AF_INET , socket . SOCK_STREAM )
sock . connect (( "localhost" , 9000 ))
data = "some data"
sock . sendall ( data )
result = sock . recv ( 1024 )
print result
sock . close ()
        
import multiprocessing
import socket
 
def handle ( connection , address ):
import logging
logging . basicConfig ( level = logging . DEBUG )
logger = logging . getLogger ( "process- %r " % ( address ,))
try :
logger . debug ( "Connected %r at %r " , connection , address )
while True :
data = connection . recv ( 1024 )
if data == "" :
logger . debug ( "Socket closed remotely" )
break
logger . debug ( "Received data %r " , data )
connection . sendall ( data )
logger . debug ( "Sent data" )
except :
logger . exception ( "Problem handling request" )
finally :
logger . debug ( "Closing socket" )
connection . close ()
 
class Server ( object ):
def __init__ ( self , hostname , port ):
import logging
self . logger = logging . getLogger ( "server" )
self . hostname = hostname
self . port = port
 
def start ( self ):
self . logger . debug ( "listening" )
self . socket = socket . socket ( socket . AF_INET , socket . SOCK_STREAM )
self . socket . bind (( self . hostname , self . port ))
self . socket . listen ( 1 )
 
while True :
conn , address = self . socket . accept ()
self . logger . debug ( "Got connection" )
process = multiprocessing . Process ( target = handle , args = ( conn , address ))
process . daemon = True
process . start ()
self . logger . debug ( "Started process %r " , process )
 
if __name__ == "__main__" :
import logging
logging . basicConfig ( level = logging . DEBUG )
server = Server ( "0.0.0.0" , 9000 )
try :
logging . info ( "Listening" )
server . start ()
except :
logging . exception ( "Unexpected exception" )
finally :
logging . info ( "Shutting down" )
for process in multiprocessing . active_children ():
logging . info ( "Shutting down process %r " , process )
process . terminate ()
process . join ()
logging . info ( "All done" )
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值