2011-05-17 87 views
0

爲什麼Socket可以在android模擬器上打開並連接到python服務器代碼並打開套接字!在其他手中當我在手機上運行相同的android代碼它不會運行。 didnt打開套接字..Any建議是什麼問題以及如何解決這樣的事情android mobile socket open

enter code here 
import sys 
from threading import Thread 
import socket 
import MySQLdb 

allClients=[] 

class Client(Thread): 

def __init__(self,clientSocket): 
      Thread.__init__(self) 
      self.sockfd = clientSocket #socket client 
      self.name = "" 
      self.nickName = "" 

def newClientConnect(self): 

    allClients.append(self.sockfd) 
    while True: 


     while True: 

      try: 
       rm= self.sockfd.recv(2048) 
       print rm 
       i=0 

       while (i<2): 

        if (rm) == row[i][0]:     
         reply="\n Welcome to our game %s: %s"%(rm,row[i][1]) 
         self.sockfd.send(reply) 
         break 

        else: 

         i=i+1 
        if i==2: 
         reply="\n Error opaa ba2a" 
         self.sockfd.send(reply) 
         i=0 
         break 
       break 

      except ValueError: 
        self.sockfd.send("\n UNVAlied Comment ") 


def run(self): 
      self.newClientConnect() 
      while True: 
        buff = self.sockfd.recv(2048) 
        if buff.strip() == 'quit': 
         self.sockfd.close() 
         break # Exit when break 
        else: 
         self.sendAll(buff) 
        #Main 
      if __name__ == "__main__": 

      #Server Connection to socket: 
      IP = '50.0.10.107' 
      PORT = 5807 
     serversocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
     serversocket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) 
      print ("Server Started") 
     try: 
    serversocket.bind(('',54633)) 
except ValueError,e: 
    print e 
serversocket.listen(5) 


db= MySQLdb.connect(host= "localhost", 
       user="root", 
       passwd="newpassword", 
       db="new_schema") 


    x=db.cursor() 
    x.execute("SELECT * FROM lolo") 
     row = x.fetchall() 


     print "Connected to the Database" 


     while True: 
    (clientSocket, address) = serversocket.accept() 
    print 'New connection from ', address 
    ct = Client(clientSocket) 
    ct.start() 




    __all__ = ['allClients','Client'] 

的Python代碼和服務器代碼,它映射和按鈕,當點擊按鈕連接並開始在模擬器上

工作的偉大
+0

呃學英語。我可以收集:他可以從模擬器打開一個套接字到他的python服務器,但不是在實際設備上 – 2011-05-17 22:37:30

+0

是的。對不起,我的英語,我會盡力學習更好 – eoeo 2011-05-17 22:41:51

+0

所以約翰在得到我的問題後,任何建議? – eoeo 2011-05-17 23:09:06

回答

0

如果您的代碼在仿真器上工作,但不在真實手機上,則可能是網絡問題。仿真器依賴局域網訪問您的服務器和通過3G網絡訪問的電話。您的服務器是否可通過互聯網訪

+0

我想我的代碼中沒有任何東西讓服務器訪問互聯網或者你有什麼想法? – eoeo 2011-05-17 23:36:46

+0

@eoeo您正嘗試連接到phyton服務器,對不對? – bob 2011-05-18 00:34:15

+0

yess python服務器 – eoeo 2011-05-18 00:46:53

3

可以是數字的東西:

  1. 你不是已經在你的清單文件中啓用網絡權限
  2. 您的WiFi/3G是禁用
  3. 如果你的服務器是您的個人計算機上,並您使用路由器連接到互聯網,那麼您需要將您用於套接字通信的端口從路由器重定向到您的機器。