我在服务器端出现此错误
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'))
此时一切都运行良好,即使我不得不单独运行它们。