【问题标题】:Data receiving problem in python socket server(tcp)python socket server(tcp)中的数据接收问题
【发布时间】:2021-07-19 00:14:23
【问题描述】:

我在一个 python 项目中工作,并使用套接字模块制作了一个 python 服务器和客户端。但是我面临一个偶然的问题,即服务器没有从客户端接收数据。代码如下:

服务器

import socket
from colorama import Fore

ip = input(f"{Fore.GREEN}Enter your ip addr\n{Fore.YELLOW}!\t$ ")
print(Fore.BLUE, 'The server is running on port number 8080')

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind(('localhost',8080))
s.listen(5)
conn, addr = s.accept()
print(Fore.RED, 'connection ready')
while True:
    cmd = input("Enter your cmd>>")
    if cmd == "":
        pass
    else:
        conn.sendall(cmd.encode('utf-8'))
        data = b""
        while True:
            resp = conn.recv(1024)
            if not resp:
                break
            data+= resp

        print(Fore.GREEN, data.decode())

客户

import socket, os
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(("localhost", 8080))

while True:
    SerData = s.recv(1024).decode()
    CliData = os.popen(SerData)
    CliData = CliData.buffer.read()
    s.sendall(CliData)

【问题讨论】:

  • 你在客户端连接到 localhost,用你的服务器的 ip 替换 localhost。

标签: python-3.x


【解决方案1】:

如果我正确理解您的问题,您正在尝试将命令从服务器运行到客户端计算机并将客户端的结果输出到服务器。虽然不需要 else 中的语句,这就是导致数据无法打印的原因,但我在客户端和服务器中都处理了一些编码和解码。

服务器.py

import socket
from colorama import Fore

ip = input(f"{Fore.GREEN}Enter your ip addr\n{Fore.YELLOW}!\t$ ")
print(Fore.BLUE, 'The server is running on port number 8080')

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind(('127.0.0.1',8080))
s.listen(5)
conn, addr = s.accept()
print(Fore.RED, 'connection ready')
while True:
    cmd = input("Enter your cmd>>")
    if cmd == "":
        pass
    else:
        conn.sendall(cmd.encode('utf-8'))
        data = ""
        
        resp = conn.recv(1024)
        if not resp:
            break
        data+= str(resp, 'utf-8')

    print(Fore.GREEN, data)

client.py

import socket, os
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(("127.0.0.1", 8080))

while True:
    SerData = s.recv(1024).decode()
    CliData = os.popen(SerData)
    CliData = CliData.buffer.read()
    CliData = str(CliData, "utf-8")
    s.sendall(str.encode(CliData))

【讨论】:

  • 我还是有同样的问题
  • 出现缩进问题,尝试更新后的答案
猜你喜欢
  • 1970-01-01
  • 2011-05-30
  • 1970-01-01
  • 2011-05-18
  • 2018-09-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多