Windows客户端与Android服务端的Socket通信(USB)

下文转自 http://blog.csdn.net/sinom/archive/2010/06/04/5646369.aspx

然后c#代码 加了个主函数。我的调试环境是pc端是win7 vs2008,服务端 android版本是2.2

最近做的项目中有功能需求要在客户使用PC体验程序时,同时通 知与PC通过USB数据线相连的OPhone手机打开相应的网站。故需要编写Windows客户端与Android服务端的Socket通信程序。由于我 对OMS系统没有研究,故想直接写Android SDK 1.1的程序应该OMS上也是可以运行的。

1、Android服务端:

import android.app.Activity; import android.os.Bundle; import java.io.BufferedReader; import java.io.InputStreamReader; import java.net.ServerSocket; import java.net.Socket; import android.app.Activity; import android.content.Intent; import android.net.Uri; import android.os.Bundle; public class G3Exp extends Activity { /** Called when the activity is first created. */ //定义侦听端口号 final int SERVER_PORT = 10086; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); //开一个新的线程来侦听客户端连接及发来的信息和打开相应网站 new Thread(){ public void run(){ startServer(); } }.start(); } private void startServer() { try { ServerSocket serverSocket = new ServerSocket(SERVER_PORT); //循环侦听客户端连接请求 while (true) { Socket client = serverSocket.accept(); try { //等待客户端发送打开网站的消息 BufferedReader in = new BufferedReader(new InputStreamReader(client.getInputStream())); String str = in.readLine(); openUrl(str); } catch (Exception e) { e.printStackTrace(); } finally { client.close(); } Thread.sleep(3000); } } catch (Exception e) { e.printStackTrace(); } } private void openUrl(String url) { Uri uri = Uri.parse(url); Intent intent = new Intent(Intent.ACTION_VIEW, uri); startActivity(intent); } }

 

2、C#客户端:

 

using System; using System.Collections.Generic; using System.Text; using System.Net.Sockets; using System.Diagnostics; namespace clsAndroid { class Program { static void Main(string[] args) { OpenWeb("http://www.baidu.com"); } static private void Connect(String server, String message) { try { //通过SDK下面的ADB命令来通知Android开侦听10086端口 Process p = new Process(); p.StartInfo.FileName = AppDomain.CurrentDomain.BaseDirectory + @"/tools/adb.exe"; p.StartInfo.Arguments = "forward tcp:12580 tcp:10086"; p.StartInfo.WindowStyle = ProcessWindowStyle.Hidden; p.Start(); Int32 port = 12580; TcpClient client = new TcpClient(server, port); //把URL发给TCP服务端 Byte[] data = System.Text.Encoding.ASCII.GetBytes(message); NetworkStream stream = client.GetStream(); stream.Write(data, 0, data.Length); client.Close(); } catch (ArgumentNullException e) { Console.WriteLine("ArgumentNullException: {0}", e); } catch (SocketException e) { Console.WriteLine("SocketException: {0}", e); } } public static void OpenWeb(string strUrl) { Connect("127.0.0.1", strUrl); } } }

 

 

简单说明一下:

(1)在Android中,在打开USB调试的情况下使用USB数据线插入PC后,Android与PC会创建虚拟网络,并且IP为127.0.0.1。但在一些OPhone手机中,使用127.0.0.1确无法连接成功。这时可自行设置IP:

set ADBHOST=192.168.10.1

adb kill-server   

adb start-server

(2)这里使用了一个新的线程来侦听和打开网站的工作,以避免造成主UI线程的阻塞。

(3)由于我对这块功能之前没有做过,故一定会有很多可以改进的地方。

你可能感兴趣的:(android)