FLoW - Omar Okasha

Wifi Direct for PC
Python Code Tested On Linux for GTK Systems

Project Overview

We are going to generate all IPs that I am going to select and start packeting all data and send them over tcp to the other IP I Selected before then The other device must open the connection to start recieving ..

Project Details

  • Python
  • Networking
  • GTK
  • XML
  • Packeting
  • Pipelining
  • Glade3

Project Code

            #### How to Use : --- 
#### First you will find your IP in a label in the end of the Program 
#### ---------------------------------------------------------------
#### To SEND data :- 
#### You Start First with Reciever Side .. 
#### Start program There .. 
####  By Import Name of the file you will want to recive .. Like "Omar.mp3 " or " Drmicrosoft.jpg "
####
#### and click receive ..
####
#### Then Go to Sender Side
#### By Import name File or Its Path .. and Choose The reciever IP .. From the Combo Box
#### and Click Send .. 
####
#### The file will send 
####
#### In the reciever Side You will Find the file in the Program Folder .. 

#### Version 1.0.0
#### Open Source 
#### Free to Use
#### Drmicrosoft 

#### To work okay .. put in one folder the .glade file and the .py file ..

#### Thanks





from gi.repository import Gtk
import sys
import socket
import pygst
pygst.require("0.10")
import gst
import os
import fcntl
import struct


s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

def sendd (sssss) :
	#xc = f1.get_title()
	msg = e1.get_text()
	com = x1.get_active_text()
	
	#l1.set_text(msg)
	print msg
	print com
	sends(com,msg)

def recivv (sssss) :
	#xc = f1.get_title()
	msg = e1.get_text()
	com = get_ip_address("wlan0")
	
	#l1.set_text(msg)
	print msg
	print com
	recivs(com,msg)




def get_ip_address(ifname):
    print ("getiing ip adress")
    q = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    return socket.inet_ntoa(fcntl.ioctl(
        q.fileno(),
        0x8915,  # SIOCGIFADDR
        struct.pack('256s', ifname[:15])
    )[20:24])
    	


	
def initiaal_combo(z) :
		
	i=0
	while 1 :
		if i <=255 :
			x1.append_text("{}{}".format("192.168.1.", i))
			i=i+1
			print "{}{}".format("192.168.1.", i)
		else : 
			break
	





def ints (ssss) : 
	l1.set_text(get_ip_address("wlan0"))
	initiaal_combo(1)
	#pop_up("Drmicrosoft","Welcome to File Share")



x = Gtk.Builder()
x.add_from_file("1.glade")



def sends (ip , files) :

	s = socket.socket()         # Create a socket object
	host = socket.gethostname() # Get local machine name
	port = 12345                 # Reserve a port for your service.
	s.connect((ip, port))
	#s.send("Hello server!")
	f = open(files,'rb')
	print 'Sending...'
	l = f.read(1024)
	while (l):
		print 'Sending...'
		s.send(l)
		l = f.read(1024)
	s.shutdown(socket.SHUT_WR)
	f.close()
	print "Done Sending"
	print s.recv(1024)
	s.close                     # Close the socket when done




def recivs (ip , files) : 
		

	s = socket.socket()         # Create a socket object
	#host = socket.gethostname() # Get local machine name
	host = ip # Get local machine name
	port = 12345               # Reserve a port for your service.
	s.bind((host, port))        # Bind to the port
	f = open(files,'wb')
	s.listen(5)                 # Now wait for client connection.
	while True:
		c, addr = s.accept()     # Establish connection with client.
		print 'Got connection from', addr
		print "Receiving..."
		l = c.recv(1024)
		while (l):
			print "Receiving..."
			f.write(l)
			l = c.recv(1024)
		f.close()
		print "Done Receiving"
		c.send('Thank you for connecting')
		c.close()                # Close the connection




b1 = x.get_object("button1")
b3 = x.get_object("button5")
b2 = x.get_object("button4")
e1 = x.get_object("entry1")
l1 = x.get_object("label3")
x1 = x.get_object("comboboxtext1")









b1.connect("clicked", Gtk.main_quit)
b2.connect("clicked", sendd)
b3.connect("clicked", recivv)

	












ints(1)



window = x.get_object("window1")

window.show_all()

Gtk.main()
            
            
        

Glade Code

        <?xml version="1.0" encoding="UTF-8"?>
<interface>
  <!-- interface-requires gtk+ 3.0 -->
  <object class="GtkWindow" id="window1">
    <property name="can_focus">False</property>
    <child>
      <object class="GtkBox" id="box1">
        <property name="visible">True</property>
        <property name="can_focus">False</property>
        <property name="orientation">vertical</property>
        <child>
          <object class="GtkFrame" id="frame1">
            <property name="visible">True</property>
            <property name="can_focus">False</property>
            <property name="label_xalign">0</property>
            <property name="shadow_type">out</property>
            <child>
              <object class="GtkAlignment" id="alignment1">
                <property name="visible">True</property>
                <property name="can_focus">False</property>
                <property name="left_padding">12</property>
                <child>
                  <object class="GtkLabel" id="label2">
                    <property name="visible">True</property>
                    <property name="can_focus">False</property>
                    <property name="label" translatable="yes">Transfer Data</property>
                  </object>
                </child>
              </object>
            </child>
            <child type="label">
              <object class="GtkLabel" id="label1">
                <property name="visible">True</property>
                <property name="can_focus">False</property>
                <property name="label" translatable="yes">Drmicrosoft</property>
                <property name="use_markup">True</property>
              </object>
            </child>
          </object>
          <packing>
            <property name="expand">False</property>
            <property name="fill">True</property>
            <property name="position">0</property>
          </packing>
        </child>
        <child>
          <object class="GtkGrid" id="grid1">
            <property name="visible">True</property>
            <property name="can_focus">False</property>
            <child>
              <object class="GtkBox" id="box2">
                <property name="visible">True</property>
                <property name="can_focus">False</property>
                <property name="valign">center</property>
                <property name="hexpand">True</property>
                <property name="orientation">vertical</property>
                <child>
                  <object class="GtkButton" id="button5">
                    <property name="label" translatable="yes">Recieve</property>
                    <property name="visible">True</property>
                    <property name="can_focus">False</property>
                    <property name="receives_default">True</property>
                  </object>
                  <packing>
                    <property name="expand">False</property>
                    <property name="fill">True</property>
                    <property name="position">0</property>
                  </packing>
                </child>
                <child>
                  <object class="GtkButton" id="button4">
                    <property name="label" translatable="yes">Send</property>
                    <property name="visible">True</property>
                    <property name="can_focus">False</property>
                    <property name="receives_default">True</property>
                  </object>
                  <packing>
                    <property name="expand">False</property>
                    <property name="fill">True</property>
                    <property name="position">1</property>
                  </packing>
                </child>
                <child>
                  <object class="GtkButton" id="button1">
                    <property name="label" translatable="yes">Exit</property>
                    <property name="visible">True</property>
                    <property name="can_focus">False</property>
                    <property name="receives_default">True</property>
                    <property name="hexpand">True</property>
                  </object>
                  <packing>
                    <property name="expand">False</property>
                    <property name="fill">True</property>
                    <property name="position">2</property>
                  </packing>
                </child>
              </object>
              <packing>
                <property name="left_attach">2</property>
                <property name="top_attach">0</property>
                <property name="width">1</property>
                <property name="height">1</property>
              </packing>
            </child>
            <child>
              <object class="GtkComboBoxText" id="comboboxtext1">
                <property name="visible">True</property>
                <property name="can_focus">False</property>
                <property name="valign">center</property>
                <property name="hexpand">True</property>
                <property name="entry_text_column">0</property>
                <property name="id_column">1</property>
              </object>
              <packing>
                <property name="left_attach">0</property>
                <property name="top_attach">0</property>
                <property name="width">1</property>
                <property name="height">1</property>
              </packing>
            </child>
            <child>
              <object class="GtkEntry" id="entry1">
                <property name="visible">True</property>
                <property name="can_focus">True</property>
                <property name="invisible_char">•</property>
              </object>
              <packing>
                <property name="left_attach">1</property>
                <property name="top_attach">0</property>
                <property name="width">1</property>
                <property name="height">1</property>
              </packing>
            </child>
          </object>
          <packing>
            <property name="expand">False</property>
            <property name="fill">True</property>
            <property name="position">1</property>
          </packing>
        </child>
        <child>
          <object class="GtkBox" id="box3">
            <property name="visible">True</property>
            <property name="can_focus">False</property>
            <property name="orientation">vertical</property>
            <child>
              <object class="GtkLabel" id="label3">
                <property name="visible">True</property>
                <property name="can_focus">False</property>
                <property name="label" translatable="yes">IP</property>
              </object>
              <packing>
                <property name="expand">False</property>
                <property name="fill">True</property>
                <property name="position">0</property>
              </packing>
            </child>
            <child>
              <object class="GtkLabel" id="label4">
                <property name="visible">True</property>
                <property name="can_focus">False</property>
                <property name="label" translatable="yes">2015 Drmicrosoft, LLC  ©</property>
              </object>
              <packing>
                <property name="expand">False</property>
                <property name="fill">True</property>
                <property name="position">1</property>
              </packing>
            </child>
          </object>
          <packing>
            <property name="expand">False</property>
            <property name="fill">True</property>
            <property name="pack_type">end</property>
            <property name="position">2</property>
          </packing>
        </child>
      </object>
    </child>
  </object>
  <object class="GtkWindow" id="window2">
    <property name="can_focus">False</property>
    <child>
      <object class="GtkBox" id="box4">
        <property name="visible">True</property>
        <property name="can_focus">False</property>
        <property name="orientation">vertical</property>
        <child>
          <object class="GtkFrame" id="frame2">
            <property name="visible">True</property>
            <property name="can_focus">False</property>
            <property name="label_xalign">0</property>
            <property name="shadow_type">none</property>
            <child>
              <object class="GtkAlignment" id="alignment2">
                <property name="visible">True</property>
                <property name="can_focus">False</property>
                <property name="left_padding">12</property>
                <child>
                  <object class="GtkLabel" id="label6">
                    <property name="visible">True</property>
                    <property name="can_focus">False</property>
                    <property name="label" translatable="yes">Alert</property>
                  </object>
                </child>
              </object>
            </child>
            <child type="label">
              <object class="GtkLabel" id="label5">
                <property name="visible">True</property>
                <property name="can_focus">False</property>
                <property name="label" translatable="yes">Drmicrosoft</property>
                <property name="use_markup">True</property>
              </object>
            </child>
          </object>
          <packing>
            <property name="expand">False</property>
            <property name="fill">True</property>
            <property name="position">0</property>
          </packing>
        </child>
        <child>
          <object class="GtkLabel" id="label7">
            <property name="visible">True</property>
            <property name="can_focus">False</property>
            <property name="label" translatable="yes">Want to recieve data ??</property>
          </object>
          <packing>
            <property name="expand">False</property>
            <property name="fill">True</property>
            <property name="position">1</property>
          </packing>
        </child>
        <child>
          <object class="GtkGrid" id="grid2">
            <property name="visible">True</property>
            <property name="can_focus">False</property>
            <child>
              <object class="GtkButton" id="button2">
                <property name="label" translatable="yes">Ok</property>
                <property name="visible">True</property>
                <property name="can_focus">False</property>
                <property name="receives_default">True</property>
                <property name="halign">center</property>
                <property name="valign">center</property>
                <property name="hexpand">True</property>
              </object>
              <packing>
                <property name="left_attach">0</property>
                <property name="top_attach">0</property>
                <property name="width">1</property>
                <property name="height">1</property>
              </packing>
            </child>
            <child>
              <object class="GtkButton" id="button3">
                <property name="label" translatable="yes">Cancel</property>
                <property name="visible">True</property>
                <property name="can_focus">False</property>
                <property name="receives_default">True</property>
                <property name="halign">center</property>
                <property name="valign">center</property>
                <property name="hexpand">True</property>
              </object>
              <packing>
                <property name="left_attach">1</property>
                <property name="top_attach">0</property>
                <property name="width">1</property>
                <property name="height">1</property>
              </packing>
            </child>
          </object>
          <packing>
            <property name="expand">False</property>
            <property name="fill">True</property>
            <property name="pack_type">end</property>
            <property name="position">2</property>
          </packing>
        </child>
      </object>
    </child>
  </object>
</interface>