python - 为什么服务器收不到客户端的消息?
问题描述
我正在尝试使用一些外部功能做一个传统的聊天服务器,但由于某种原因服务器没有接收数据:
import socket
import select
import sys
import _thread
server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
IP_address = "127.0.0.1"
Port = 5454
server.bind((IP_address, Port))
server.listen(100)
list_of_clients = []
def clientthread(conn, addr):
# sends a message to the client whose user object is conn
conn.send(bytes("Welcome to this chatroom!", "utf8"))
while True:
try:
message = conn.recv(2048)
print(message)
if message:
print("<" + addr[0] + "> " + message)
# Calls broadcast function to send message to all
message_to_send = "<" + addr[0] + "> " + message
broadcast(message_to_send, conn)
else:
print("removed")
remove(conn)
except:
continue
def broadcast(message, connection):
for clients in list_of_clients:
if clients != connection:
try:
clients.send(bytes(message, "utf8"))
except:
clients.close()
# if the link is broken, we remove the client
remove(clients)
def remove(connection):
if connection in list_of_clients:
list_of_clients.remove(connection)
while True:
conn, addr = server.accept()
list_of_clients.append(conn)
# prints the address of the user that just connected
print(addr[0] + " connected")
# creates and individual thread for every user
# that connects
_thread.start_new_thread(clientthread, (conn, addr))
conn.close()
server.close()
和客户:
import socket
import select
import sys
from file_utils import client_message_observer as ob
def callback():
print("message.txt was modified")
return True
server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
IP_address = "127.0.0.1"
Port = 5454
server.connect((IP_address, Port))
observer = ob.FileModifiedHandler("client_data/", "message.txt", callback())
server.send(bytes("aloooo"))
while True:
# maintains a list of possible input streams
sockets_list = [sys.stdin, server]
read_sockets, write_socket, error_socket = select.select(sockets_list, [], [])
for socks in read_sockets:
if socks == server:
message = socks.recv(2048)
print(message)
#write to file
else:
if (observer.callback == True):
message = open("client_data/message.txt").readline()
server.send(bytes(message, "utf8"))
print("send")
server.close()
没有一张试纸出现。
代码不是很清楚,它监听 message.txt 文件中的更改,当文件被修改时,它应该将文本作为消息发送到服务器。我没有添加观察者的代码,但我测试了它并且它可以工作。但是我想不通为什么服务器不响应客户端?
解决方案
推荐阅读
- r - 为什么 R 中的 as.Date 函数会将我输入的年份转换为当前年份 2020?
- css - 如何将 WordPress 主题菜单样式复制到插件自动创建的菜单中?
- arrays - ValueError:形状(2,210)和(2,210)未对齐:210(dim 1)!= 2(dim 0)
- c# - WPF TextBox 检测文本是否溢出
- java - 使用 Enums 为每个不同的对象返回不同的操作
- javascript - 无法重新组合数组
- regex - Go 正则表达式是否支持连续匹配?
- java - 意外结果:字符串旁边的 null
- javascript - 从 forEachloop Javascript 中的异步函数返回值
- node.js - React Native:无法解析本地模块。存在于节点模块中