android模拟器连接PC

一,前言

       android模拟器上跑个客户端,这个客户端去连接PC上的服务器,然后过程采用udp方式。

       本文不涉及PC上的客户端去连接android模拟器上的服务器。

       环境配置:

       android SDK用的是:adt-bundle-windows-x86-20130219

        JDK:6u39

       大致是下面这个样子吧,如图:


二,正文

android客户端网络处理部分的代码:

    protected void connectServerWithUDPSocket()
    {
    	DatagramSocket socket;
    	try{
    		socket = new DatagramSocket();
    		InetAddress serverAddr = InetAddress.getByName("192.168.1.109");
    		int serverPort = 1998;
    		String str = "hello world";
    		byte data[] = str.getBytes();
    		DatagramPacket packet = new DatagramPacket(data,data.length,serverAddr,serverPort);
    		socket.send(packet);
    	}
    	catch(SocketException e){
    		e.printStackTrace();
    	}
    	catch(UnknownHostException e){
    		e.printStackTrace();
    	}
    	catch(IOException e){
    		e.printStackTrace();
    	}
    }

模拟器不需要做端口重映射(android模拟器连接PC机的时候不需要做端口重映射,PC机连接android模拟器的话则需要做端口重映射)。


服务器是这样样子的,就是我的PC机(IP:192.168.1.109),然后监听1998端口吧。

服务器就这样等吧,这是在本地PC机上,wireshark没有办法捕获,想捕获packet的话就把服务器跑到网络上的其他PC机(比如:192.168.1.118)。

---------------------------------------------------------------------------------------------------------------------------------------


把网络处理部分的代码丢到OnCreate函数里:

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        connectServerWithUDPSocket();
    }

编译、运行。。。

结果出问题了,如下图:

这个……java.net.SocketException: socket failed:EACCES(Permission denied)

google一下,貌似在manifest文件中添加网络权限。

那就添加一下呗

保存,编译,运行。。。。

又出问题了。。。。


android.os.NetworkOnMainThreadException……这。。。。

google一下,貌似网络处理这部分代码不能搁到主线程里面哦,就是说不能把connectServerWithUDPSocket()函数丢在OnCreate里面。

那行,那这样吧,我创建一个子线程,然后把网络处理的代码搁到子线程里面。

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Thread thread = new Thread(new Runnable()
        {
			@Override
			public void run() {
				// TODO Auto-generated method stub
				connectServerWithUDPSocket();
			}
        });
        thread.start();
    }

编译、运行。。。。哎,成功了。。。


三,后记

       作为一名android初学者,我总是很悲剧的碰到各种各样莫名其妙的问题,有时候google谷到想死,可能是搜索关键词用的不合适吧,奔溃。。。走路上谁用大光灯照我,我就骂他。。。。。

       时间仓促,文章写的马马虎虎,希望对大家有所帮助。

       写在2014.05.15


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值