我有一個服務器端(Python 3)和一個客戶端(Python 2.7),我正在嘗試使用套接字模塊。這個想法是,服務器端永久活動,客戶端套接字通過函式呼叫連接。然后需要將資料從服務器發送到客戶端,直到客戶端斷開連接(手動)。然后服務器應該回到監聽程序并等待下一個連接。我對套接字沒有任何經驗,我一直在嘗試我發現的一些例子。在第一行,我的問題是重新連接到同一個服務器套接字。
服務器端:
import socket
HOST = "127.0.0.1"
PORT = 65432
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((HOST, PORT))
s.listen()
conn, addr = s.accept()
print("Connected by", addr)
for x in range(10):
data = conn.recv(1024)
if not data:
break
conn.sendall(data)
conn.close()
客戶端(使用 Tkinter-GUI):
import Tkinter as tk
import socket
import random
import time
keyState = False
HOST = '127.0.0.1'
PORT = 65432
def onButton():
global keyState
if(not keyState ):
keyState = not keyState
key_button.config(relief='sunken')
connectSocket()
print(keyState)
return
if(keyState ):
keyState = not keyState
key_button.config(relief='raised')
disconnectSocket()
print(keyState )
return
def connectSocket():
print("connectSocket()")
global HOST, PORT
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((HOST, PORT))
for x in range(10):
if(x<5):
val = random.uniform(0.0, 400.0)
else:
val = random.uniform(-400,0)
s.sendall(str(val))
data = s.recv(1024)
print 'Received', repr(data)
s.close()
def disconnectSocket():
print("disconnectSocket()")
return
#Main GUI
root = tk.Tk()
root.title('Python Socket Test')
root.configure(background='white')
root.geometry("200x300")
#Button
root.update()
softkey_button = tk.Button(root, text="Softkey", command = lambda: onButton(), relief='flat')
softkey_button.place(x=75,y=200)
root.mainloop()
uj5u.com熱心網友回復:
您只需要在服務器端添加一個 while True 回圈,目前您只接受一個連接,連接關閉后程式停止。在您的服務器檔案上試試這個:
import socket
HOST = "127.0.0.1"
PORT = 65432
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((HOST, PORT))
while True:
s.listen()
conn, addr = s.accept()
print("Connected by", addr)
for x in range(10):
data = conn.recv(1024)
if not data:
break
conn.sendall(data)
conn.close()
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/536291.html
下一篇:訪問套接字參考以傳遞給子行程
