简体   繁体   English

errno 111连接被ubuntu vmware中的python拒绝

[英]errno 111 connection refused with python in ubuntu vmware

Hi I have a problem in my server- client connection I wrote the 2 codes on windows 10 and they worked perfectly. 嗨,我的服务器-客户端连接出现问题,我在Windows 10上编写了2个代码,它们工作得很好。 But when I tried to execute them on ubuntu in a VM I had this error: 但是,当我尝试在VM上的ubuntu上执行它们时,出现此错误:

Traceback (most recent call last):
  File "client3.py", line 9, in <module>
    sock.connect(('192.168.1.53', 1234))
  File "/usr/lib/python2.7/socket.py", line 228, in meth
    return getattr(self._sock,name)(*args)
socket.error: [Errno 111] Connection refused

the server code: 服务器代码:

import threading
import SocketServer
import json
import base64

class ThreadedTCPRequestHandler(SocketServer.BaseRequestHandler):

    def handle(self):

        data = self.request.recv(327680)
        data = json.loads(data)
        cur_thread = threading.current_thread()
        JL= data['Jliste']
        for i in range(0,9) :
            cel = json.loads(JL[i])
            file_name = cel['name']
            img = base64.b64decode(cel['img'])
            with open(file_name,'wb') as _file:
                _file.write(img)
            print "image {} Received ".format(i)
        response = "images Received "
        print response
        self.request.sendall(response)

class ThreadedTCPServer(SocketServer.ThreadingMixIn, SocketServer.TCPServer):
    pass


if __name__ == "__main__":



        server = ThreadedTCPServer(("localhost", 1234), ThreadedTCPRequestHandler)


        # Start a thread with the server -- that thread will then start one
        # more thread for each request
        server_thread = threading.Thread(target=server.serve_forever)
        # Exit the server thread when the main thread terminates
        server_thread.daemon = True
        server_thread.start()
        print "Server loop running in thread:", server_thread.name

the client code: 客户代码:

import socket
import json


sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.connect(('localhost', 1234))
try:

    def generate_names(count):
            return 'User.2.{}.jpg'.format(count)
    L = []
    for i in range(0,9):
            name = generate_names(i+1)
            fp = open(name,'rb')
            fp = fp.read()
            fp = fp.encode('base64')
            cel = {}
            cel['name'] = name
            cel['img'] = fp
            jcel = json.dumps(cel)
            L.append(jcel)
    data = {}
    data['Jliste'] = L
    s = json.dumps(data)
    sock.send(s)
    response = sock.recv(1024)
    print "Received: {}".format(response)
finally:
    sock.close()

the new error i get is: 我得到的新错误是:

Exception happened during processing of request from ('127.0.0.1', 60900)
Traceback (most recent call last):
  File "/usr/lib/python2.7/SocketServer.py", line 596, in process_request_thread
    self.finish_request(request, client_address)
  File "/usr/lib/python2.7/SocketServer.py", line 331, in finish_request
    self.RequestHandlerClass(request, client_address, self)
  File "/usr/lib/python2.7/SocketServer.py", line 652, in __init__
    self.handle()
  File "server.py", line 12, in handle
    data = json.loads(data)
  File "/usr/lib/python2.7/json/__init__.py", line 339, in loads
    return _default_decoder.decode(s)
  File "/usr/lib/python2.7/json/decoder.py", line 364, in decode
    obj, end = self.raw_decode(s, idx=_w(s, 0).end())
  File "/usr/lib/python2.7/json/decoder.py", line 380, in raw_decode
    obj, end = self.scan_once(s, idx)
ValueError: Unterminated string starting at: line 1 column 16913 (char 16912)

Not sure why this works on Windows, but when I run your code on Ubuntu, your server just exits - just as it is supposed to. 不确定为什么它可以在Windows上运行,但是当我在Ubuntu上运行您的代码时,您的服务器就会退出-就像应该的那样。 It prints "server loop running..." and then exits. 它显示“服务器循环正在运行...”,然后退出。 As your thread is set to server_thread.daemon=True , the thread is killed as well. 当您的线程设置为server_thread.daemon=True ,该线程也会被杀死。 It does not even have time to initialise the socket. 甚至没有时间初始化套接字。

If you change server_thread.daemon=False or add sleep(600) or something like that (you would of course an infinite loop) as the last statement in your main(), it starts listening to the socket and process requests - which is probably what you want. 如果您更改server_thread.daemon=False或添加sleep(600)或类似的内容(您当然会进行无限循环)作为main()中的最后一条语句,它将开始侦听套接字并处理请求-这可能是你想要什么。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM