【问题标题】:Python Socket is not receiving messages sent to itPython Socket 没有接收到发送给它的消息
【发布时间】: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)

我认为这与服务器和用户上的主机名和端口不同有关。

【问题讨论】:

  • 两个脚本上的HOSTPORT 是什么?
  • @SergeBallesta 我正在我的电脑上测试它,所以HOST 是我的 IP,PORT 是 64496。这些是两个程序都使用的服务器凭据。

标签: python sockets windows-10


【解决方案1】:

修改这个:

                    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

进入这个:

                else:
                    with open(data["name"], 'r') as userfile:
                        data1 = userfile.read()
                    conn.sendall(bytes(base64.b64encode(bytes(data1,'utf-8')),'utf-8'))
                    conn.close

您已经有一个连接到该主机和端口的套接字,无需创建其他端口(也因为我可以看到 HOST 等于 host1)

【讨论】:

  • @user13198216 很高兴听到,如果是这样,请将我的答案设置为解决方案,谢谢
猜你喜欢
  • 2016-01-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-28
  • 1970-01-01
  • 2014-11-03
  • 2019-11-08
  • 2018-03-31
相关资源
最近更新 更多