【发布时间】:2020-04-02 14:13:06
【问题描述】:
我在客户端和服务器之间建立了一个套接字连接。我对其进行了设置,因此它发出了数据请求,但它没有接收到数据。它抛出Traceback (most recent call last):
File "C:\Users\jenga\Desktop\Jacobs_Python\net\server\server.py", line 38, in <module>
s1.connect((host1, port1))
ConnectionRefusedError: [WinError 10061] No connection could be made because the target machine actively refused it,但它发送一个响应。如何设置它以接收消息?顺便说一句,它向服务器发出读取文件的请求。
服务器.py:
import json
import socket
import base64
while True:
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
s.bind((HOST, PORT))
s.listen()
conn, addr = s.accept()
with conn:
print('Connected by', addr)
while True:
data = conn.recv(1024)
data = repr(data)
data = str(data)
data1 = []
for i in range(len(data)):
data1.append(data[i])
data1[0] = ""
data1[1] = ""
data1[len(data1)-1] = ""
data ="".join(data1).replace("'","\"").replace("~","=")
if (data != ""):
print(data)
data = json.loads(data)
typer = data["type"]
if (typer == 'putreq'):
#Writes to file, there are no bugs here.
else:
host1 = addr[0]
port1 = addr[1]
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s1:
s1.connect((host1, port1))
with open(data["name"], 'r') as userfile:
data1 = userfile.read()
s1.sendall(bytes(base64.b64encode(bytes(data1,'utf-8')),'utf-8'))
s1.close
s.close()
客户端.py:
import socket
import sys
import base64
import json
import random
import time
typec = sys.argv[1]
filec = sys.argv[2]
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
s.connect((HOST, PORT))
s.sendall(bytes(str({"type":'namereq',"name":filec}), "UTF-8"))
data = s.recv(1024)
data = repr(data)
data = str(data)
data1 = []
for i in range(len(data)):
data1.append(data[i])
data1[0] = ""
data1[1] = ""
data1[len(data1)-1] = ""
data ="".join(data1).replace("~","=")
if(data != ''):
print(data)
我认为这与服务器和用户上的主机名和端口不同有关。
【问题讨论】:
-
两个脚本上的
HOST和PORT是什么? -
@SergeBallesta 我正在我的电脑上测试它,所以
HOST是我的 IP,PORT是 64496。这些是两个程序都使用的服务器凭据。
标签: python sockets windows-10