【脚本语言系列】关于Python网络通讯socket,你需要知道的事

本文介绍了如何使用Socket进行网络通讯,包括UDP和TCP的具体实现方式,并对比了它们的特点。此外,还介绍了更高级的ZeroMQ库的应用场景。通过示例代码展示了服务器与客户端之间的通讯流程。

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

如何使用socket进行网络通讯

socket

UDP

# -*- coding: utf-8 -*-
import socket
from datetime import datetime
# server
server_address = ("localhost", 6789)
max_size = 4096
print("Starting the server at", datetime.now())
print("Waiting for a client to call.")
server = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
server.bind(server_address)

data, client = server.recvfrom(max_size)
print("At", datetime.now(), client, "said", data)
server.sendto(b"Are you talking to me?",client)
server.close()
# -*- coding: utf-8 -*-
import socket
from datetime import datetime
# client
server_address = ("localhost", 6789)
max_size = 4096
print("Starting the client at", datetime.now())
client = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
client.sendto(b"Hey!", server_address)
data, server = client.recvfrom(max_size)
print ("At", datetime.now(), server, "said", data)
client.close()

TCP

# -*- coding: utf-8 -*-
import socket
from datetime import datetime
# server
server_address = ("localhost", 6789)
max_size = 1000
print("Starting the server at", datetime.now())
print("Waiting for a client to call.")
server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server.bind(server_address)
server.listen(5)

client, addr = server.accept()
data = client.recv(max_size)

print("At", datetime.now(), client, "said", data)
client.sendall(b"Are you talking to me?")
client.close()
server.close()
# -*- coding: utf-8 -*-
import socket
from datetime import datetime
# client
server_address = ("localhost", 6789)
max_size = 1000

print("Starting the client at", datetime.now())
client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client.connect(server_address)
client.sendall(b"Hey!")
data= client.recv(max_size)
print ("At", datetime.now(), "someone replied", data)
client.close()

ZeroMQ

Server

# -*- coding:utf-8 -*-
import zmq
# server
host = "127.0.0.1"
port = 6789
context = zmq.Context()
server = context.socket(zmq.REP)
server.connect("tcp://%s:%s"%(host, port))
while True:
    request_bytes = server.recv()
    request_str = request_str.encode("utf-8")
    print ("That voice in my head says: %s"%request_str)
    reply_str = "Stop saying: %s" %request_str
    reply_bytes = bytes(reply_str, "utf-8")
    server.send(reply_bytes)

Client

# -*- coding:utf-8 -*-
import zmq
# client
host = "127.0.0.1"
port = 6789
context = zmq.Context()
client = context.socket(zmq.REQ)
client.connect("tcp://%s:%s"%(host, port))
for num in range(1, 6):
    request_str = "message #%s" %num
    request_bytes = request_str.encode("utf-8")
    client.send(request_bytes)
    reply_bytes = client.recv()
    reply_str = reply_bytes.decode("utf-8")
    print ("Send %s, received %s" %(request_str, reply_str))

ActiveMQ

RabbitMQ

什么是socket

socket(套接字)源于Unix操作系统,编码异常繁琐。

套接字通讯程序编写过程中面临的问题:
* UDP 发送大小受限的消息
* TCP 发送字节流;TCP 需要添加额外的字符形成消息

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值