2011-05-17 91 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. 如果你的服务器是您的个人计算机上,并您使用路由器连接到互联网,那么您需要将您用于套接字通信的端口从路由器重定向到您的机器。