python socket.connet socket.gaierror: [Errno -2] 名称或服务未知

时间:2021-03-09 09:44:11

标签: python sockets

我在服务器端出现此错误

s2.connect((str(address), 2012))

socket.gaierror: [Errno -2] 名称或服务未知

server.py

import socket
import time 
import pickle



def greet():

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
f = '192.168.1.100'
s.bind((f, 1235))
        
s.listen(10)
i= 0
while True:
        i = i+1
        print(i)
        clientsocket, address = s.accept()
        ##add = str(address)
        s2 = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        print('this :'+ str(address) + 'connected')
        clientsocket.send(bytes('Welcome to server', 'utf-8'))
        s2.connect((str(address), 2012))
        while True:
            rcv = s2.recv(1024)
            print(rcv.decode('utf-8'))
        


        msg = clientsocket.recv(1024)
        print(msg.decode("utf-8"))


greet()

在客户端,我有这个应用

import socket 
import kivy
from kivy.uix.gridlayout import GridLayout
from kivy.app import App
from kivy.uix.label import Label
from kivy.uix.button import Button
from kivy.uix.screenmanager import ScreenManager, Screen
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.widget import Widget 
from kivy.uix.textinput import TextInput 
from kivy.clock import Clock
from kivy.uix.image import Image
from kivy.uix.screenmanager import ScreenManager, Screen, FadeTransition
from kivy.core.window import Window
from kivy.config import Config
from kivy.lang import Builder
from kivy.properties import StringProperty, ObjectProperty, NumericProperty, ReferenceListProperty
from kivy.graphics import *
import time
import os 
from pathlib import Path 

Builder.load_file('the.kv')

class fscreen(Widget):
    msg = StringProperty()
    def __init__(self, **kwargs):
        super().__init__(**kwargs)      
        response = os.system("ping -c 1 " + "192.168.1.100")
        if response == 0:       
            self.s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
            #self.s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
            
            self.s.connect(('192.168.1.100', 1235))
            self.rcv = self.s.recv(1024)
            self.msg = str(self.rcv)
            print(self.rcv.decode("utf-8"))
            self.s.close()          
            self.coco = True
        else:
            self.msg = "cant establish connection"

    def on_touch_down(self, touch):
        print(touch.x,touch.y)
        if touch.x !=0:
            self.prelog = Path('prelog.txt')    
            if self.prelog.exists():
                theapp.screenm.current = "thirdscreen"  
            else:
                theapp.screenm.current = "secondscreen" 

class secscreen(Widget):
    def __init__(self,**kwargs):
        super().__init__(**kwargs)
    
        self.s2 = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        self.s2.bind(('192.168.1.126', 2012))
        self.s2.listen(10)
        self.clientsocket, self.address = self.s2.accept()

    def Signin(self):
        pass    
        
    def Login(self):
        self.prelog = open("prelog.txt", "a+")
        self.loginemail = self.ids.loginemail.text  
        self.loginpassword = self.ids.loginpassword.text
        print(self.loginpassword, self.loginpassword)
        ###### for multiplie users add lines and for security only hashed passes later

        self.combo = self.loginemail + ";" + self.loginpassword
        self.clientsocket.send(bytes(self.combo , 'utf-8'))
        

        print(self.combo)



        self.prelog.write(self.combo)

        self.prelog.close()


    def logrequest(self):
        pass

        

    #def on_touch_down(self, touch):
    #   pass
    #   print(touch.x,touch.y)
    #   if touch.x !=0:
    #       print("hello")
    #       theapp.screenm.current = "thirdscreen"


class thscreen(Widget):
    def __init__(self,**kwargs):
        super().__init__(**kwargs)
        pass
        
        
class theapp(App):
    def build(self):
        self.screenm = ScreenManager() #(transition=FadeTransition())

        self.fscreen = fscreen()
        screen = Screen(name = "first screen")
        screen.add_widget(self.fscreen)
        self.screenm.add_widget(screen)

        self.secscreen = secscreen()
        screen  = Screen(name = "secondscreen")
        screen.add_widget(self.secscreen)
        self.screenm.add_widget(screen)

        self.thscreen = thscreen()
        screen  = Screen(name = "thirdscreen")
        screen.add_widget(self.thscreen)
        self.screenm.add_widget(screen)
        return self.screenm

if __name__ == "__main__":
    theapp = theapp()
    theapp.run()

无法弄清楚 s2.connect 上的问题

在此之前,我有两个单独的文件而不是 server.py。 第一个是这个

    def greet():
        
        
        s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        s.bind(('192.168.1.100', 1229))

        s.listen(10)

        i= 0
        while True:
            i = i+1
            print(i)
            clientsocket, address = s.accept()
            add = address
            recieve()
            print('this :'+ str(address) + 'connected')
            clientsocket.send(bytes('Welcome to server', 'utf-8'))

            msg = clientsocket.recv(1024)
            print(msg.decode("utf-8"))

greet()

第二个是

import socket
import time 
import pickle


s2 = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
while True:
    s2.connect(('192.168.1.126', 2011))
    rcv = s2.recv(1024)
    print(rcv.decode('utf-8'))

此时一切都运行良好,即使我不得不单独运行它们。

0 个答案:

没有答案