【问题标题】:make public the object created by tcp socket公开 tcp socket 创建的对象
【发布时间】:2022-10-19 23:54:16
【问题描述】:

我正在制作一个 GUI 应用程序,我遇到的问题是我不知道如何访问由 .accept() 创建的对象,我看过很多教程,但它们都喜欢控制台应用程序,所以我需要创建在某些套接字对象中,我使用按钮打开连接,其他进程发送数据

from email import message
from fileinput import filename
from operator import truediv
import sys
from tkinter.tix import Tree
from PyQt5.QtWidgets import QApplication
from PyQt5.QtWidgets import QMainWindow
import tkinter
import tkinter.filedialog
import socket
import threading as th
from time import sleep
from tkinter import messagebox


from GUI import Ui_MainWindow, Ui_MainWindow
from tkinter import filedialog
from tkinter import *


TCP_IP = '127.0.0.1'
TCP_PORT = 5005
BUFFER_SIZE = 1024
MESSAGE = "Hello, World!"
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)



def Stream():
    while True:
        while main_win.Transmit:
            f = open(main_win.filename, "r")
            x = len(f.readlines())
            while x>=main_win.Lastline:
                data=(f.readline(main_win.Lastline+1))
                main_win.Lastline=main_win.Lastline+1
                conn.send(data) #out of scope
            f.close()
            sleep(main_win.ui.doubleSpinBox.value())
    
    

T = th.Timer(0.10, Stream,args=(''))
class MainWindow:
    Transmit = False
    Lastline=0
    filename=""
    Started=False
    Connected=False
    def __init__(self):
        self.main_win = QMainWindow()
        self.ui = Ui_MainWindow()
        self.ui.setupUi(self.main_win)
        self.ui.pushButton.clicked.connect(self.on_pushButton_clicked)
        self.ui.pushButton_2.clicked.connect(self.transmit_clicked)
        self.ui.pushButton_4.clicked.connect(self.OpenConn)

    def show(self):
        self.main_win.show()

    def on_pushButton_clicked(self):
        filename = filedialog.askopenfilename(
            initialdir="/", title="Select file", filetypes=(("txt files", "*.txt"), ("all files", "*.*")))
        print(filename)
        self.ui.lineEdit.setText(filename)

    def transmit_clicked(self):
        if not self.Connected:
            messagebox.showerror('Error', 'Error: No hay una conexion establecida')
            return
        if self.filename == "":
            messagebox.showerror('Error', 'Error: No ha seleccionado el archivo')
            return
        if (not self.Transmit):
            self.Transmit = True
            self.ui.pushButton_2.setText("Detener Streaming de datos")
            # iniciar transmicion de datos
            print(T.interval)
            if (not self.Started):
                T.start()
                self.Started=True
        else:
            self.Transmit = False
            self.ui.pushButton_2.setText("Iniciar Streaming de datos")

    def OpenConn(self):
        conn, addr = s.accept()
        self.Connected=True



if __name__ == '__main__':
    app = QApplication(sys.argv)
    main_win = MainWindow()
    main_win.show()
    import socket
    TCP_IP = '127.0.0.1'
    TCP_PORT = 5005
    BUFFER_SIZE = 1024
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    s.bind((TCP_IP, TCP_PORT))
    s.listen(1)
    #s.setblocking(0)
    #conn, addr = s.accept()
    sys.exit(app.exec_())

【问题讨论】:

    标签: python tcp


    【解决方案1】:

    我自己解决了这个问题,它比我想象的要简单,我只需要声明两个全局对象并完成

    class MainWindow:
        conn=socket.AF_INET
        addr=socket.SOCK_STREAM
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-23
      • 1970-01-01
      • 2014-06-03
      • 2012-06-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多