gpt4 book ai didi

python - 使用 Python 让客户端套接字等待服务器套接字

转载 作者:行者123 更新时间:2023-11-28 21:51:16 25 4
gpt4 key购买 nike

我正在尝试让客户端保持事件状态并等待服务器连接。目前,如果我在服务器之前打开客户端,它会失败,因为客户端找不到服务器连接并停止运行。我看过类似的主题,但它们适用于 C# 和 Java。我是新手,所以请大家帮帮我 :)

客户端代码:

#!/usr/bin/env python
import pyaudio
import socket
import sys
import time


# Pyaudio Initialization
chunk = 1024
FORMAT = pyaudio.paInt16
CHANNELS = 1
RATE = 10240

p = pyaudio.PyAudio()

stream = p.open(format = FORMAT,
channels = CHANNELS,
rate = RATE,
input = True,
frames_per_buffer = chunk)

# Socket Initialization
host = ''
port = 50000
size = 1024
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((host,port))

# Main Functionality
while 1:
data = stream.read(chunk)
s.send(data)
s.recv(size)

服务器代码:

#!/usr/bin/env python
import pyaudio
import socket, ssl
import sys

# Pyaudio Initialization
chunk = 1024
p = pyaudio.PyAudio()

stream = p.open(format = pyaudio.paInt16,
channels = 1,
rate = 10240,
output = True)

# Socket Initialization
host = ''
port = 50000
backlog = 5
size = 1024
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((host,port))
s.listen(backlog)

client, address = s.accept()

# Main Functionality
while 1:
data = client.recv(size)
if data:
# Write data to pyaudio stream
stream.write(data) # Stream the recieved audio data
client.send('ACK') # Send an ACK

client.close()
stream.close()
p.terminate()

还有一个问题,我应该使用哪种协议(protocol)-python 扩展来运行相同的但使用远程连接而不是本地连接)?曼尼谢谢 :)

最佳答案

你可以尝试这样的事情:

#!/usr/bin/env python
import pyaudio
import socket
import sys
import time


# Pyaudio Initialization
chunk = 1024
FORMAT = pyaudio.paInt16
CHANNELS = 1
RATE = 10240

p = pyaudio.PyAudio()

stream = p.open(format = FORMAT,
channels = CHANNELS,
rate = RATE,
input = True,
frames_per_buffer = chunk)

# Socket Initialization
host = ''
port = 50000
size = 1024
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
connected = False
while not connected:
try:
s.connect((host,port))
connected = True
except Exception as e:
pass #Do nothing, just try again

# Main Functionality
while 1:
data = stream.read(chunk)
s.send(data)
s.recv(size)

至于你的第二个问题:这应该也适用于远程连接,因为你绑定(bind)到所有接口(interface) host='' 只要确保你转发你的路由器(只有服务器需要端口转发)

关于python - 使用 Python 让客户端套接字等待服务器套接字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30615277/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com