Socket Module examples

Transfer Text from One Mobile to Other Mobile

(Server File)

(Should Be running on the server device when client file is to be running on other device)
# this file is the server side
# the corresponding client side file is called rfcomm_client.py

from socket import *
import appuifw

server_socket = socket(AF_BT, SOCK_STREAM)
p = bt_rfcomm_get_available_server_channel(server_socket)
server_socket.bind(("", p))
print "bind done"
server_socket.listen(1)
bt_advertise_service( u"port", server_socket, True, RFCOMM)
set_security(server_socket, AUTH)
print "I am listening"

# Note: Don't call .send or .recv on the server_socket!
# Use the sock object returned by server_socket.accept().
(sock,peer_addr) = server_socket.accept()
print "Connection from %s"%peer_addr
test = appuifw.query(u"Type words", "text", u"")
sock.send(test+'\n')
print "sending done"
import e32
# Allow time for data to be sent to work around a bug in the socket
# module.
e32.ao_sleep(1)
sock.close()
 

(Client File)

# this file is the client side
# the corresponding server side file is called rfcomm_server.py

import socket
import appuifw
import e32

class BTReader:
 def connect(self):
 self.sock=socket.socket(socket.AF_BT,socket.SOCK_STREAM)
 addr,services=socket.bt_discover()
 print "Discovered: %s, %s"%(addr,services)
 if len(services)>0:
 import appuifw
 choices=services.keys()
 choices.sort()
 choice=appuifw.popup_menu([unicode(services[x])+": "+x
 for x in choices],u'Choose port:')
 port=services[choices[choice]]
 else:
 port=services[services.keys()[0]]
 address=(addr,port)
 print "Connecting to "+str(address)+"...",
 self.sock.connect(address)
 print "Connected..." 
 def readline(self):
 line=[]
 while 1:
 ch=self.sock.recv(1)
 if(ch=='\n'):
 break
 line.append(ch)
 return ''.join(line)
 def close(self):
 self.sock.close()

bt=BTReader()
bt.connect()
print "Received Result: "+bt.readline()
bt.close()

Transfer File through OBEX

 (Server File)

# This is the server, the corresponding client is obex_client.py
from socket import *
import appuifw

# Create a bluetooth socket in waiting state to be connected to
s = socket(AF_BT, SOCK_STREAM)
port = bt_rfcomm_get_available_server_channel(s)
print "Binding service to port %s"%port
s.bind(("", port))
print "Service bound."

# Advertise the OBEX service, so it can be seen by other phones
service_name=u"Test OBEX service"

print "Advertising service as %s"%repr(service_name)
bt_advertise_service(service_name, s, True, OBEX)

try: 
 print "Setting security to AUTH."
 set_security(s, AUTH)

 receive_path = u"c:\\obex.txt"
 print "Receiving file."
 bt_obex_receive(s, receive_path)
 print "File received."

 import e32
 e32.ao_sleep(1)
finally:
 print "Stopping service advertising."
 bt_advertise_service(service_name, s, False, OBEX)

print "Closing socket."
s.close()
print "Socket closed."
print "Finished."
 
 

(Client File)

# the corresponding server side file is called obex_server.py

from socket import *
import appuifw
import e32

# JL: you don't need a socket for this!
## create socket
#s=socket(AF_BT,SOCK_STREAM)

# scan for other phones offering OBEX service
addr,services=bt_obex_discover()
print "Discovered: %s, %s"%(addr,services)
if len(services)>0:
 choices=services.keys()
 choices.sort()
 choice=appuifw.popup_menu([unicode(services[x])+": "+x
 for x in choices],u'Choose port:')
 port=services[choices[choice]]
else:
 port=services[services.keys()[0]]
address=(addr,port)

# create file to be sent
send_path = u"c:\\test.txt"
f=open(send_path, 'w')
f.write("hello")
f.close() # NOTE: parens were missing here before!

# send file via OBEX
print "Sending file %s to host %s port %s"%(send_path, address[0], address[1])
bt_obex_send_file(address[0], address[1], send_path)
print "File sent."

Send File To PC from Mobile

 
import appuifw
import socket
import e32
 
 
def bt_connect():
    global s
    s=socket.socket(socket.AF_BT,socket.SOCK_STREAM)
    target=''
    if not target:
        address,services=socket.bt_discover()
        print "Discovered: %s, %s"%(address,services)
        if len(services)>1:
            import appuifw
            choices=services.keys()
            choices.sort()
            choice=appuifw.popup_menu([unicode(services[x])+": "+x
                                        for x in choices],u'Choose port:')
            target=(address,services[choices[choice]])
        else:
            target=(address,services.values()[0])
    print "Connecting to "+str(target)
    s.connect(target)
    print "OK."
 
    bt_typetext()
        
 
def bt_typetext():
    global s
    test = appuifw.query(u"Type words", "text", u"")
    if test == None:
        exit_key_handler()
    else:
        s.send(test)
        bt_typetext()
 
def exit_key_handler():
    script_lock.signal()
    appuifw.app.set_exit()
 
appuifw.app.title = u"bt mob to PC"
 
script_lock = e32.Ao_lock()
 
appuifw.app.exit_key_handler = exit_key_handler()
 
bt_connect()
 
script_lock.wait()