我正在使用socket在Python3中创建一个简单的聊天
这是密码
客户
#!/bin/python
import socket
import threading
import time
tLock = threading.Lock()
poweroff = False
def receving(name, sock):
while not poweroff:
try:
tLock.acquire()
while True:
data, addr = sock.recvfrom(1024)
print (str(data))
except:
pass
finally:
tLock.release()
host = '127.0.0.1'
port = 0
server = ('127.0.0.1', 5000)
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.bind((host, port))
s.setblocking(0)
rT = threading.Thread(target=receving, args=("RecvThread", s))
rT.start()
alias = input("Username: ")
time.sleep(0.2)
message = input(alias + ">>> ")
while message != 'q':
if message != "":
s.sendto(str(alias + ": " + message).encode('utf-8'), server)
tLock.acquire()
message = input(alias + ">>> ")
tLock.release()
time.sleep(0.2)
poweroff = True
rT.join()
s.close()
服务器
#!/bin/python
import socket
import time
hostname = '127.0.0.1'
port = 5000
clients = []
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.bind((hostname, port))
s.setblocking(0)
iQuit = False
print ("Server Started.")
while not iQuit:
try:
data, addr = s.recvfrom(1024)
if addr not in clients:
clients.append(addr)
print (time.ctime(time.time()) + str(addr) + ": :" + str(data))
for client in clients:
s.sendto(data, client)
except:
pass
s.close()
当用户连接时,如何向服务器打印字符串?
在您插入名称后,我尝试添加此字符串
s.sendto(str(alias + " Connected").encode('utf-8'), server)
但对我来说,输出是不可靠的
另一个问题:为什么我在发送消息时会得到这样的东西?
Username: User_A
User_A>>> Hello
User_A>>> How Are you?
b'User:A: Hello'
User_A>>>
b'User_A: How Are you?'
b'User_B: Hi'
我必须按回车键看看user_B给我发东西。
您通过在消息的输入期间锁定接收线程来强制执行此行为。你必须下定决心,是想在打字时打印这个还是想打印输入的数据
您可能希望为基于网络的消息程序同时输入和输出。
关于第二个问题:您正在打印二进制字符串,请参阅此处以了解更多信息。
在服务器或客户端上打印消息时,使用str(data.decode('utf-8'))
代替str(data)
。
关于第一个问题:如果您在询问用户名后发送“连接”字符串,这应该是可行的。如果您包含decode('utf-8')
,字符串的解码方式与普通消息相同,并且在我看来很正常。
我一直在努力通过Smack和Openfire服务器与XMPP聊天。我的问题如下: 每当一个用户向另一个用户发送消息时,该消息就会在另一个用户处正确接收。但是任何回复都不会出现在第一条消息的发件人处。因此,用户1成功地发送给用户2。然后,用户2无法向用户1发送任何回复。另一方面,如果我重新启动并让用户再次登录,则用户2可以发送给用户1,但反之亦然。 我想说的是,只有聊天的发起者才能发送消息,接收者不
我尝试用Java套接字API制作基本的Java聊天应用程序。但是当客户端终止时,它会引发以下异常, socketException:套接字关闭 我认为即使套接字已经关闭,BufferedReader流仍然尝试读取行消息。 但我不知道当客户端终止时,何时以及如何关闭BufferedReader流和套接字连接。 我完全被这部分卡住了。有什么想法吗?
我一直在开发一个简单的python套接字聊天室,客户端和服务器可以在其中相互发送消息。我遇到的问题是服务器和客户端一次只能发送一条消息。我希望它能像任何其他聊天室一样工作,在那里我可以在发送消息时收到消息,任何帮助都会有很大帮助
当我尝试执行此操作时,我在Python中得到以下错误: 我做错了什么?
为此他必须加入由用户A1创建的相同twilio通道,然后才能加载消息。 这就是我被困住的地方。 用户A2如何发现用户A1或任何其他用户是否给他发送了一些消息,并且他还需要知道他需要加入哪个通道来加载发送的消息。 https://github.com/philnash/twilio-chat-kendo-react 更新: 使用这个- 这就是我面临的问题。
服务器和客户端使用我自己的协议进行通信,看起来像XMPP。我应该实现聊天应用。因此,当一个用户编写String时,它应该立即通过服务器发送给其他客户端。我在服务器上有sendToAll方法。但用户只有在按下回车键时才能看到其他用户的消息。用户如何在不按回车键的情况下接收消息? 这是我的客户: 以及带有ServerThread的服务器。 服务器线程。