python同时发送与接收_同时发送/接收消息socket python
Casper为我提供了多个能够接入服务器的应用程序代码。目前遇到的障碍是这些应用程序无法实现通信功能。
这主要是因为你的客户想要
s_name = s.recv(1024)
,而casper的服务器不发送其名称。这是你客户的一个变种(期望
主办
和
港口
该值被指定为命令参数,它可以与Casper服务器协同工作,以应对您的原始问题。
客户端一次只能发送一条消息
)通过使用单独的线程:
import socket
import sys
s = socket.socket()
s.connect((sys.argv[1], int(sys.argv[2])))
name = input(str("Please enter your username : "))
print(" Connected to chat server")
s.send(name.encode())
def receive_and_print():
for message in iter(lambda: s.recv(1024).decode(), ''):
print(":", message)
print("")
import threading
background_thread = threading.Thread(target=receive_and_print)
background_thread.daemon = True
background_thread.start()
while 1:
s.send(input("Please enter your message: ").encode())
print("Sent")
print("")
请注意,casper的服务器有一系列缺陷:
即使您的客户端能够随时发送信息,服务器会依次接收各个客户端的信息;当服务器等待客户端A时,其他客户端如B就可以开始发送数据,但除非客户端A已经提交了数据,否则服务器不会立即响应。
它不处理客户端断开连接。
当所有客户机都断开连接时,它进入一个繁忙的循环。
你能不能换一下我的服务器
该系统与客户机协同工作,并采用独立线程分别处理输入与接收过程
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")
def input_and_send():
while 1:
message = name+" : "+input(str("Please enter your message: "))
conn.send(message.encode())
print("Sent")
print("")
import threading
background_thread = threading.Thread(target=input_and_send)
background_thread.daemon = True
background_thread.start()
for message in iter(lambda: conn.recv(1024).decode(), ''):
print(s_name, ":", message)
print("")
