gpt4 book ai didi

python - 如何使用套接字从服务器向客户端发送消息

转载 作者:太空宇宙 更新时间:2023-11-04 03:55:00 27 4
gpt4 key购买 nike

服务器

import socket
import sys
HOST = ''
PORT = 9000
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
print 'Socket created'
try:
s.bind((HOST, PORT))
except socket.error , msg:
print 'Bind failed. Error Code : ' + str(msg[0]) + ' Message ' + msg[1]
sys.exit()
print 'Socket bind complete'
s.listen(10)
print 'Socket now listening'
conn, addr = s.accept()
print 'Connecting from: ' + addr[0] + ':' + str(addr[1])
while 1:
message=raw_input(">")
s.sendto(message, (addr[0], addr[1]))
print(s.recv(1024))

我如何让它向客户端发送消息?我可以让它回复客户端发送给服务器的字符串,但在这种情况下,我希望服务器发送第一条消息......任何人都可以帮助我,谷歌上的解决方案似乎无法正常工作,我不确定我做错了什么。

最佳答案

由于这是 Google Stack Overflow 的第一个结果,我将发布一个完整的、适用于客户端和服务器的示例。你可以从第一开始。经验证可在 Ubuntu 18.04 上使用 Python 3.6.9

text_send_server.py:

# text_send_server.py

import socket
import select
import time

HOST = 'localhost'
PORT = 65439

ACK_TEXT = 'text_received'


def main():
# instantiate a socket object
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
print('socket instantiated')

# bind the socket
sock.bind((HOST, PORT))
print('socket binded')

# start the socket listening
sock.listen()
print('socket now listening')

# accept the socket response from the client, and get the connection object
conn, addr = sock.accept() # Note: execution waits here until the client calls sock.connect()
print('socket accepted, got connection object')

myCounter = 0
while True:
message = 'message ' + str(myCounter)
print('sending: ' + message)
sendTextViaSocket(message, conn)
myCounter += 1
time.sleep(1)
# end while
# end function

def sendTextViaSocket(message, sock):
# encode the text message
encodedMessage = bytes(message, 'utf-8')

# send the data via the socket to the server
sock.sendall(encodedMessage)

# receive acknowledgment from the server
encodedAckText = sock.recv(1024)
ackText = encodedAckText.decode('utf-8')

# log if acknowledgment was successful
if ackText == ACK_TEXT:
print('server acknowledged reception of text')
else:
print('error: server has sent back ' + ackText)
# end if
# end function

if __name__ == '__main__':
main()

text_receive_client.py

# text_receive_client.py

import socket
import select
import time

HOST = 'localhost'
PORT = 65439

ACK_TEXT = 'text_received'


def main():
# instantiate a socket object
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
print('socket instantiated')

# connect the socket
connectionSuccessful = False
while not connectionSuccessful:
try:
sock.connect((HOST, PORT)) # Note: if execution gets here before the server starts up, this line will cause an error, hence the try-except
print('socket connected')
connectionSuccessful = True
except:
pass
# end try
# end while

socks = [sock]
while True:
readySocks, _, _ = select.select(socks, [], [], 5)
for sock in readySocks:
message = receiveTextViaSocket(sock)
print('received: ' + str(message))
# end for
# end while
# end function

def receiveTextViaSocket(sock):
# get the text via the scoket
encodedMessage = sock.recv(1024)

# if we didn't get anything, log an error and bail
if not encodedMessage:
print('error: encodedMessage was received as None')
return None
# end if

# decode the received text message
message = encodedMessage.decode('utf-8')

# now time to send the acknowledgement
# encode the acknowledgement text
encodedAckText = bytes(ACK_TEXT, 'utf-8')
# send the encoded acknowledgement text
sock.sendall(encodedAckText)

return message
# end function

if __name__ == '__main__':
main()

关于python - 如何使用套接字从服务器向客户端发送消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19104242/

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