python服务器与android客户端socket通信实例

1265次阅读  |  发布于6年以前

本文实例讲述了python服务器与android客户端socket通信的方法。分享给大家供大家参考。具体实现方法如下:

首先,服务器端使用python完成,下面为python代码:

复制代码 代码如下:

server.py

import socket
def getipaddrs(hostname):#只是为了显示IP,仅仅测试一下
result = socket.getaddrinfo(hostname, None, 0, socket.SOCK_STREAM)
return [x[4][0] for x in result]

host = ''#为空代表为本地host
hostname = socket.gethostname()
hostip = getipaddrs(hostname)
print('host ip', hostip)#应该显示为:127.0.1.1
port = 9999 # Arbitrary non-privileged port
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((host, port))
s.listen(4)
while True:
conn, addr = s.accept()
print('Connected by', addr)
data = conn.recv(1024)
if not data: break
conn.sendall(data)#把接收到数据原封不动的发送回去
print('Received', repr(data))
conn.close()

下面是Android代码:

复制代码 代码如下:

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.Socket;
import java.net.UnknownHostException;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;

public class TcpClient extends Activity {
/* Called when the activity is first created. /
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
runTcpClient();
finish();
}

private static final int TCP_SERVER_PORT = 9999;//should be same to the server port    
private void runTcpClient() {    
    try {    
        Socket s = new Socket("**.**.intel.com", TCP_SERVER_PORT);//注意host改成你服务器的hostname或IP地址    
        BufferedReader in = new BufferedReader(new InputStreamReader(s.getInputStream()));    
        BufferedWriter out = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));    
        //send output msg    
        String outMsg = "TCP connecting to " + TCP_SERVER_PORT + System.getProperty("line.separator");     
        out.write(outMsg);//发送数据    
        out.flush();    
        Log.i("TcpClient", "sent: " + outMsg);    
        //accept server response    
        String inMsg = in.readLine() + System.getProperty("line.separator");//得到服务器返回的数据    
        Log.i("TcpClient", "received: " + inMsg);    
        //close connection    
        s.close();    
    } catch (UnknownHostException e) {    
        e.printStackTrace();    
    } catch (IOException e) {    
        e.printStackTrace();    
    }     
}    
//replace runTcpClient() at onCreate with this method if you want to run tcp client as a service    
private void runTcpClientAsService() {    
    Intent lIntent = new Intent(this.getApplicationContext(), TcpClientService.class);    
    this.startService(lIntent);    
}    

}

安卓代码中要注意的就是服务器的地址要写对,而且要保证服务器是可以被你的网段访问的。

希望本文所述对大家的Python程序设计有所帮助。

Copyright© 2013-2020

All Rights Reserved 京ICP备2023019179号-8