python - 如何使用 conn.send() 向客户端发送数据
问题描述
我试图创建一个简单的聊天服务器。我已经能够使用'client.send()'通过客户端将信息发送到服务器,但我似乎无法执行相同的服务器->客户端
我尝试过使用 conn.send() 和 conn.sendall() 等方法,但是(我猜是因为代码正在尝试中)它们似乎在初始 conn.send(str.encode("Connected" ))
服务器代码
import socket
from _thread import *
import sys
server = "192.168.0.4"
port = 5555
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
try:
s.bind((server, port))
except socket.error as e:
str(e)
s.listen(2)
print("Waiting for a connection, Server Started")
def threaded_client(conn):
conn.send(str.encode("Connected"))
reply = ""
while True:
conn.send(str.encode(str(reply)))
try:
data = conn.recv(2048*1)
reply = data.decode("utf-8")
if not data:
print("Disconnected")
break
else:
print("Received: ", reply)
print("Sending : ", reply)
conn.sendall(str.encode(reply)) #Where I want to send information to the client
except:
break
print("Lost connection")
conn.close()
while True:
conn, addr = s.accept()
print("Connected to:", addr)
start_new_thread(threaded_client, (conn,))
客户代码
import socket
class Network:
def __init__(self):
self.client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
self.server = "192.168.0.4"
self.port = 5555
self.addr = (self.server, self.port)
self.id = self.connect()
print(self.id)
def connect(self):
try:
self.client.connect(self.addr)
return self.client.recv(2048).decode()
except:
pass
def send(self, data):
try:
self.client.send(str.encode(data))
return self.client.recv(2048).decode()
except socket.error as e:
print(e)
from network import Network
n = Network()
while True:
n.send("sending stuff") #this works/sends properly
解决方案
你忘了print()
用来显示来自服务器的数据
while True:
print( n.send("sending stuff") )
顺便说一句:在服务器中,您两次发送相同的数据 -conn.send()
和conn.sendall()
推荐阅读
- java - java.net.CookieManager put SEVERE: Invalid cookie for [URL]
- scala - 抽象类与方法之间的Scala差异
- python - 如何根据条件将数据框值附加到空列表
- python - Python输入验证函数保留旧变量
- mysql - 无法将 mariadb 服务器连接到 mysql 工作台
- c# - PostSharp Logging 添加 >>> 和 <<< 到方法进入/退出日志条目
- javascript - 如何使用 Fetch 变量 - Javascript
- google-api - 将 Google API 访问权限限制为单个或一组用户,而不是对您的服务帐户的域范围权限
- c++ - 我是否使用了正确的不失真例程?照片是广角还是鱼眼?
- python - Python Regex.split text + 将每个拆分导出为 .txt,每个拆分单词作为文件名导出到指定文件夹