2016-12-22 1 views
0

誰でもこのコードを教えてもらえますか?このプログラムにP2Pチャットコードを追加するにはどうすればよいですか? 私はLANこのアプリのQtソケットコードを追加して2台のPC間のチャットを可能にする

enter image description here

import sys, os 
import socket 

from PyQt5 import QtCore, QtGui, QtWidgets 
from PyQt5.QtWidgets import (QApplication, QMainWindow, QWidget, 
    QLineEdit, QFileDialog, QInputDialog, QFileDialog,QMessageBox, QMenuBar) 

from PyQt5.QtGui import QIcon 
from PyQt5.Qt import QPushButton, QTextEdit, QMessageBox 

class myApp (QMainWindow): 
    def __init__(self): 
     super().__init__() 

self.initUI() 

def initUI(self): 

    self.main_text  =  QtWidgets.QTextEdit(self) 
    self.send_box  =  QtWidgets.QLineEdit(self) 
    self.connect_btn =  QtWidgets.QPushButton('Connect', self) 
    self.browse_btn  =  QtWidgets.QPushButton('Browse',self) 
    ip_add_box   =  QtWidgets.QLineEdit(self) 
    port_box   =  QtWidgets.QLineEdit(self) 




    self.main_text.setGeometry(25, 30, 360, 350) 
    self.send_box.setGeometry(25, 400, 360, 60) 
    ip_add_box.setGeometry(25, 530, 150, 30) 
    port_box.setGeometry(180, 530, 90,30) 
    self.connect_btn.setGeometry(25, 500, 70, 25) 
    self.browse_btn.setGeometry(100,500,70,25) 

    self.setGeometry(200,100,400,580) 
    self.setWindowTitle('My Application') 
    self.setWindowIcon(QIcon('icon.png')) 

    # CODE BLOCK FOR EVENTS 
    self.send_box.returnPressed.connect(self.sendData)  # EnterPressed Event for SendBox LineEdit 
    self.connect_btn.clicked.connect(self.connectNet)  # Socket Connect event for the connect Button   
    self.browse_btn.clicked.connect(self.BrowseFile)  # Browse file connect event for Browse Button 


    self.show() 

def sendData(self): 
    self.main_text.append(self.send_box.text()) 
    self.send_box.clear() 
def connectNet(self): 
    host = 'localhost' 
    port = 12345 
    sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
    server_address = (host, port) 
    print ("Connecting to %s port %s" % server_address) 
    sock.connect(server_address) 

    try: 
     message = "Test message. This will be echoed" 
     print ("Sending %s" % message) 
     sock.sendall(message) 
     # Look for the response 
     amount_received = 0 
     amount_expected = len(message) 
     while amount_received < amount_expected: 
      data = sock.recv(16) 
      amount_received += len(data) 
      print ("Received: %s" % data) 
    finally: 
     print ("Closing connection to the server") 
     sock.close() 

def BrowseFile (self): 
    filePath = QtWidgets.QFileDialog.getOpenFileName(self) 






if __name__ == '__main__': 

    app = QApplication(sys.argv) 
    ex = myApp() 
    sys.exit(app.exec_()) 
+0

@eyllanesc お願いします。 – Sabawoon

+0

明白なコードの書式が間違っていたのを修正しました。 –

+0

これを確認してください:http://doc.qt.io/qt-5/qtnetwork-network-chat-example.html – eyllanesc

答えて

0

は最後にこれを固定の上に2台のPC間でチャットできるようにしたいです。クライアント側はこちら

from PyQt5 import QtCore, QtWidgets, QtWidgets, QtNetwork 

class Client(QtWidgets.QDialog): 

def __init__(self, parent=None): 
    super(Client, self).__init__(parent) 

    self.main_text = QtWidgets.QTextEdit(self) 
    self.main_text.setReadOnly(True) 
    self.send_box = QtWidgets.QLineEdit(self) 
    self.send_button = QtWidgets.QPushButton("Send", self) 
    self.browse_btn = QtWidgets.QPushButton("Browse", self) 
    # EVENT FOR SEND BUTTON 
    self.send_button.clicked.connect(self.sendData) 

    self.server_ip = QtWidgets.QLineEdit(self) 
    self.server_ip.setPlaceholderText("IP address") 
    self.port_address = QtWidgets.QLineEdit(self) 
    self.port_address.setPlaceholderText("port") 

    self.userName = QtWidgets.QLineEdit(self) 
    self.userName.setPlaceholderText("username") 

    self.connectButton = QtWidgets.QPushButton("Connect",self) 
    #Connect Button EVENT 
    self.connectButton.clicked.connect(self.connection) 
    self.connectButton.setDefault(True) 

    self.setGeometry(400,50,500,600) 
    self.main_text.setGeometry(25,50,450,400) 
    self.send_box.setGeometry(25,470,450,40) 
    self.send_button.setGeometry(385,520,90,30) 
    self.browse_btn.setGeometry(25,520,100,30) 
    self.server_ip.setGeometry(150,10,130,25) 
    self.port_address.setGeometry(300,10,70,25) 
    self.connectButton.setGeometry(385,10,90,25) 
    self.userName.setGeometry(25,10,120,25) 


    #NetworkInput 
    self.socket = QtNetwork.QTcpSocket(self) 
    self.socket.readyRead.connect(self.readData) 
    self.socket.error.connect(self.displayError) 

def closeEvent(self, event): 
    self.socket.disconnectFromHost() 

def connection(self): 
    self.socket.connectToHost(self.server_ip.text(), int(self.port_address.text())) 
    if self.socket.waitForConnected(1000): 
     self.user = self.userName.text() 
     self.send("login %s" % self.user) 
     self.connectButton.setEnabled(False) 
     self.send_button.setDefault(True) 
     self.send_box.setFocus() 
     #self.setWindowTitle("<%s>" % self.user) 
def readData(self): 
    message = self.socket.readLine().data().decode("utf-8") 
    self.main_text.append(message) 

def send(self, message): 
    self.socket.write(message.encode("utf-8")) 

def sendData(self): 
    message = "say %s" % (self.send_box.text()) 
    self.send(message) 
    self.send_box.clear() 
    self.send_box.setFocus() 

def displayError(self): 
    QtWidgets.QMessageBox.information(self, "Connection", "Connection error") 


if __name__ == "__main__": 
    import sys 
    app = QtWidgets.QApplication(sys.argv) 
    client = Client() 
    sys.exit(client.exec_()) 
+0

しかし、いずれかが助けることができれば、私は依然として参照ボタンとファイル転送に助けが必要です。 – Sabawoon

関連する問題