python服务器与android客户端socket通信实例
本文实例讲述了python服务器与android客户端socket通信的方法。分享给大家供大家参考。具体实现方法如下:
首先,服务器端使用python完成,下面为python代码:
#server.py
importsocket
defgetipaddrs(hostname):#只是为了显示IP,仅仅测试一下
result=socket.getaddrinfo(hostname,None,0,socket.SOCK_STREAM)
return[x[4][0]forxinresult]
host=''#为空代表为本地host
hostname=socket.gethostname()
hostip=getipaddrs(hostname)
print('hostip',hostip)#应该显示为:127.0.1.1
port=9999 #Arbitrarynon-privilegedport
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
s.bind((host,port))
s.listen(4)
whileTrue:
conn,addr=s.accept()
print('Connectedby',addr)
data=conn.recv(1024)
ifnotdata:break
conn.sendall(data)#把接收到数据原封不动的发送回去
print('Received',repr(data))
conn.close()
下面是Android代码:
importjava.io.BufferedReader;
importjava.io.BufferedWriter;
importjava.io.IOException;
importjava.io.InputStreamReader;
importjava.io.OutputStreamWriter;
importjava.net.Socket;
importjava.net.UnknownHostException;
importandroid.app.Activity;
importandroid.content.Intent;
importandroid.os.Bundle;
importandroid.util.Log;
publicclassTcpClientextendsActivity{
/**Calledwhentheactivityisfirstcreated.*/
@Override
publicvoidonCreate(BundlesavedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
runTcpClient();
finish();
}
privatestaticfinalintTCP_SERVER_PORT=9999;//shouldbesametotheserverport
privatevoidrunTcpClient(){
try{
Sockets=newSocket("**.**.intel.com",TCP_SERVER_PORT);//注意host改成你服务器的hostname或IP地址
BufferedReaderin=newBufferedReader(newInputStreamReader(s.getInputStream()));
BufferedWriterout=newBufferedWriter(newOutputStreamWriter(s.getOutputStream()));
//sendoutputmsg
StringoutMsg="TCPconnectingto"+TCP_SERVER_PORT+System.getProperty("line.separator");
out.write(outMsg);//发送数据
out.flush();
Log.i("TcpClient","sent:"+outMsg);
//acceptserverresponse
StringinMsg=in.readLine()+System.getProperty("line.separator");//得到服务器返回的数据
Log.i("TcpClient","received:"+inMsg);
//closeconnection
s.close();
}catch(UnknownHostExceptione){
e.printStackTrace();
}catch(IOExceptione){
e.printStackTrace();
}
}
//replacerunTcpClient()atonCreatewiththismethodifyouwanttoruntcpclientasaservice
privatevoidrunTcpClientAsService(){
IntentlIntent=newIntent(this.getApplicationContext(),TcpClientService.class);
this.startService(lIntent);
}
}安卓代码中要注意的就是服务器的地址要写对,而且要保证服务器是可以被你的网段访问的。
希望本文所述对大家的Python程序设计有所帮助。