sys*_*456 5 python sockets send recv
我一直在开发一个简单的 python 套接字聊天室,客户端和服务器可以在其中相互发送消息。我遇到的问题是服务器和客户端一次只能发送一条消息。我希望它像其他聊天室一样工作,当我发送消息时我可以收到消息,任何帮助都会有很大帮助
import socket
import sys
s = socket.socket()
host = socket.gethostname()
print(" server will start on host : ", host)
port = 8080
s.bind((host,port))
name = input(str("Please enter your username: "))
print("")
print("Server is waiting for incoming connections")
print("")
s.listen(1)
conn, addr = s.accept()
print("Recieved connection")
print("")
s_name = conn.recv(1024)
s_name = s_name.decode()
print(s_name, "has joined the chat room")
conn.send(name.encode())
while 1:
message = input(str("Please enter your message: "))
conn.send(message.encode())
print("Sent")
print("")
message = conn.recv(1024)
message = message.decode()
print(s_name, ":" ,message)
print("")
Run Code Online (Sandbox Code Playgroud)
import socket
import sys
s = socket.socket()
host = input(str("Please enter the hostname of the server : "))
port = 8080
s.connect((host,port))
name = input(str("Please enter your username : "))
print(" Connected to chat server")
s.send(name.encode())
s_name = s.recv(1024)
s_name = s_name.decode()
print("")
print(s_name, "has joined the chat room ")
while 1:
message = s.recv(1024)
message = message.decode()
print(s_name, ":" ,message)
print("")
message = input(str("Please enter your message: "))
message = message.encode()
s.send(message)
print("Sent")
print("")
Run Code Online (Sandbox Code Playgroud)
\n\n\nCaSper 给了我服务器代码,多个客户端可以连接到服务器,但现在的问题是客户端无法相互通信 \xe2\x80\xa6
\n
这主要是因为您的客户端想要s_name = s.recv(1024),而 CaSper 的服务器不发送其名称。这是您的客户端的一个变体(期望主机和端口作为命令参数),它与 CaSper 的服务器一起使用,并且还通过使用单独的线程解决您的原始问题(客户端一次只能发送一条消息):
import socket\nimport sys\n\ns = socket.socket()\ns.connect((sys.argv[1], int(sys.argv[2])))\nname = input(str("Please enter your username : "))\nprint(" Connected to chat server")\ns.send(name.encode())\n\ndef receive_and_print():\n for message in iter(lambda: s.recv(1024).decode(), \'\'):\n print(":", message)\n print("")\nimport threading\nbackground_thread = threading.Thread(target=receive_and_print)\nbackground_thread.daemon = True\nbackground_thread.start()\n\nwhile 1:\n s.send(input("Please enter your message: ").encode())\n print("Sent")\n print("")\nRun Code Online (Sandbox Code Playgroud)\n\n请注意,CaSper 的服务器存在一系列缺陷:
\n\n有关更好的服务器示例,请参阅问题使用 select 处理多个请求。
\n\n\n\n\n\xe2\x80\xa6 您能否更改我的服务器以使其正常工作\xe2\x80\xa6
\n
这是与该客户端一起使用的服务器的变体,也使用单独的线程进行输入和接收:
\n\nimport socket\nimport sys\n\ns = socket.socket()\nhost = socket.gethostname()\nprint(" server will start on host : ", host)\nport = 8080\ns.bind((host,port))\nname = input(str("Please enter your username: "))\nprint("")\nprint("Server is waiting for incoming connections")\nprint("")\ns.listen(1)\nconn, addr = s.accept()\nprint("Recieved connection")\nprint("")\ns_name = conn.recv(1024)\ns_name = s_name.decode()\nprint(s_name, "has joined the chat room")\n\ndef input_and_send():\n while 1:\n message = name+" : "+input(str("Please enter your message: "))\n conn.send(message.encode())\n print("Sent")\n print("")\nimport threading\nbackground_thread = threading.Thread(target=input_and_send)\nbackground_thread.daemon = True\nbackground_thread.start()\n\nfor message in iter(lambda: conn.recv(1024).decode(), \'\'):\n print(s_name, ":", message)\n print("")\nRun Code Online (Sandbox Code Playgroud)\n
| 归档时间: |
|
| 查看次数: |
12224 次 |
| 最近记录: |