Android手机通过socket与pc通信.docx
- 文档编号:14478795
- 上传时间:2023-06-23
- 格式:DOCX
- 页数:7
- 大小:19.44KB
Android手机通过socket与pc通信.docx
《Android手机通过socket与pc通信.docx》由会员分享,可在线阅读,更多相关《Android手机通过socket与pc通信.docx(7页珍藏版)》请在冰点文库上搜索。
Android手机通过socket与pc通信
Android手机通过socket与pc通信
Android手机通过socket与pc通信标签:
androidsocket手机layoutbuttonstring2012-07-1223:
30
17312人阅读
评论(30)
收藏
举报分类:
Android(9)版权声明:
本文为博主原创文章,未经博主允许不得转载。
在Android中可以直接利用java中的Socket与ServerSocket构建socket通信。
代码的运行环境:
pc端:
普通pc,作为服务器,已经设置有域名(通过动态域名软件设置),在5648端口进行监听。
Android手机客户端:
android2.3设备。
代码运行一切正常,客户端发送的文字将在服务器端接收并显示,服务器每接收到客户端的一行文字,就会返回一个从0开始递增的整数,此整数将在客户端显示出来。
pc端代码:
[java]viewplaincopypackagetest;importjava.io.BufferedReader;importjava.io.IOException;importjava.io.InputStream;importjava.io.InputStreamReader;importjava.io.OutputStream;importjava.io.PrintWriter;import.ServerSocket;import.Socket;publicclassTestimplementsRunnable{/***@paramargs*/intmax=10;//最大开启线程数inti=0;//回复数字inttemp;ServerSocketserverSocket;Socketsocket[];publicTest(){try{serverSocket=newServerSocket(5648);//在5648端口进行侦听}catch(IOExceptione){//TODOAuto-generatedcatchblocke.printStackTrace();System.out.println("can'tinitateServerSocket!
");return;}socket=newSocket[max];System.out.println("waitingforconnect");try{while((socket[i]=serverSocket.accept())!
=null){temp=i;i++;newThread(this).start();//每侦听到一个客户端的连接,就会开启一个工作线程}}catch(IOExceptione){//TODOAuto-generatedcatchblocke.printStackTrace();}}publicstaticvoidmain(String[]args){newTest();}@Overridepublicvoidrun(){Socketsk=socket[temp];System.out.println("accept:
"+sk.getInetAddress().getHostAddress());InputStreamis=null;OutputStreamos=null;BufferedReaderbr=null;PrintWriterpw=null;try{is=sk.getInputStream();os=sk.getOutputStream();br=newBufferedReader(newInputStreamReader(is));pw=newPrintWriter(os);}catch(IOExceptione){//TODOAuto-generatedcatchblocke.printStackTrace();try{sk.close();}catch(IOExceptione1){//TODOAuto-generatedcatchblocke1.printStackTrace();}return;}Stringstr;try{intm=0;while((str=br.readLine())!
=null){System.out.println(str);pw.println(m);pw.flush();m++;}}catch(IOExceptione){//TODOAuto-generatedcatchblocke.printStackTrace();}}}android设备客户端代码:
MainActivity.java代码:
[java]viewplaincopypackagecom.tobacco.phonetest;importjava.io.BufferedReader;importjava.io.IOException;importjava.io.InputStreamReader;importjava.io.PrintWriter;import.Socket;import.UnknownHostException;importandroid.app.Activity;importandroid.os.Bundle;importandroid.os.Handler;importandroid.util.Log;importandroid.view.Menu;importandroid.view.View;importandroid.view.View.OnClickListener;importandroid.widget.Button;importandroid.widget.EditText;importandroid.widget.Toast;publicclassMainActivityextendsActivityimplementsOnClickListener,Runnable{privateButtonbutton;privateEditTexteditText;privateSocketsocket;privatePrintWriterpw;privateBufferedReaderbr;privateHandlerhandler;@OverridepublicvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);handler=newHandler();button=(Button)findViewById(R.id.button);button.setOnClickListener(this);editText=(EditText)findViewById(R.id.edittext);try{socket=newSocket("",5648);//连接到的5648端口[java]viewplaincopy<spanstyle="white-space:
pre"></span>//是我申请的域名}catch(UnknownHostExceptione){//TODOAuto-generatedcatchblocke.printStackTrace();Log.e("socket","unknownhost");}catch(IOExceptione){//TODOAuto-generatedcatchblocke.printStackTrace();Log.e("socket","ioexecption");}if(socket==null){Log.e("socket","null");}elsetry{pw=newPrintWriter(socket.getOutputStream());br=newBufferedReader(newInputStreamReader(socket.getInputStream()));if(pw!
=null&&br!
=null){newThread(this).start();}}catch(IOExceptione){//TODOAuto-generatedcatchblocke.printStackTrace();}}@OverridepublicbooleanonCreateOptionsMenu(Menumenu){getMenuInflater().inflate(R.menu.activity_main,menu);returntrue;}publicvoidonClick(Viewview){if(view==button){Stringstr;str=editText.getText().toString();pw.println(str);pw.flush();}}publicvoidrun(){try{Stringstr;while((str=br.readLine())!
=null){finalStrings=str;handler.post(newRunnable(){publicvoidrun(){Toast.makeText(MainActivity.this,s,Toast.LENGTH_LONG).show();}});}}catch(IOExceptione){//TODOAuto-generatedcatchblocke.printStackTrace();}}}
activity_main.xml代码:
[html]viewplaincopy<LinearLayoutxmlns:
android="android:
layout_width="match_parent"android:
layout_height="match_parent"android:
orientation="vertical"><TextViewandroid:
layout_width="wrap_content"android:
layout_height="wrap_content"android:
text="@string/hello_world"/><EditTextandroid:
id="@+id/edittext"android:
layout_width="fill_parent"android:
layout_height="wrap_content"android:
hint="@string/message"/><Buttonandroid:
id="@+id/button"android:
layout_width="fill_parent"android:
layout_height="wrap_content"android:
text="@string/hello_world"/></LinearLayout>
因为此客户端程序要用到网络,所以要在manifest文件中添加权限。
Manifest.xml代码:
[html]viewplaincopy<manifestxmlns:
android="package="com.tobacco.phonetest"android:
versionCode="1"android:
versionName="1.0"><uses-sdkandroid:
minSdkVersion="8"android:
targetSdkVersion="15"/><uses-permissionandroid:
name="android.permission.INTERNET"></uses-permission><applicationandroid:
icon="@drawable/ic_launcher"android:
label="@string/app_name"android:
theme="@style/AppTheme"><activityandroid:
name=".MainActivity"android:
label="@string/title_activity_main"><intent-filter><actionandroid:
name="android.intent.action.MAIN"/><categoryandroid:
name="android.intent.category.LAUNCHER"/></intent-filter></activity></application></manifest>
顶11
踩0
上一篇Linux下Android开发手机设备不可用问题下一篇用nasm重写linux0.00
我的同类文章Android(9)·利用adb查看模拟器中的数据库·关于Android中的乱码·Android中获取屏幕相关信息(屏幕大小,状态栏、标题栏高度)·Linux下Android开发手机设备不可用问题·eclipse安装adt不能从官网抓取数据的解决办法
·利用adb修改设备中的SharedPreferences配置文件·关于Cursor,关于ListView,关于Adapter,关于学习方法·利用ListActivity,CursorAdapter获取用户输入(短信群发器的地址输入实现)总结·Android实现远程控制PC(Android[客户端]+Qt[服务器端])主题推荐
android
socket
手机
通信
pc
猜你在找
Android开发精品课程【Java核心知识】Android必备的Java基础知识(三)Android底层技术:
Java层系统服务(AndroidService)移动手机APP测试从零开始(高级篇)基于J2EE实现Webservice项目实战ATM查看评论
22楼日月同辉5252015-09-0416:
58发表[回复]初学者学习了,给楼主赞一个21楼zxwei092015-08-2022:
17发表[回复]楼主的这个demo貌似不可以啊,老是报异常:
Causedby:
android.os.NetworkOnMainThreadException,真机和模拟器都测试过了,不行啊。
20楼卢泰桉TaiAn2015-07-2410:
42发表[回复]在38行的位置socket=newSocket();这个地方,不能在主线程中操作,得启动一个新的线程19楼张海锋2015-06-1222:
50发表[回复]学习了18楼玉米土豆2015-06-1111:
37发表[回复]楼主您好:
请问一下PC端的代码在哪儿运行,需要服务器吗?
还有<spanstyle="white-space:
pre">这代码在eclipse里编译不过怎么回事?
跪求回答,谢谢!
17楼us_lei2015-05-3111:
33发表[回复]您好,请问在手机2G或3G网络下,有什么好的办法实现手机客户端程序与PC端服务器端程序通信吗?
希望能跟您交个朋友,向您请教。
Re:
tobacco2015-06-0109:
10发表[回复]回复us_lei:
如果PC端有公网IP的话可以直接用PC的公网IP通信,如果没有,需要在公网上搭建一个转发服务器。
16楼u0141562862015-04-2212:
01发表[回复]为什么安卓客户端已打开就被关闭了,楼主测试的时候是用手机测试还是用模拟器的?
模拟器不是默认可以连接网络的吗?
小弟刚入门,还请多指教15楼u0141562862015-04-2211:
58发表[回复]为什么安卓客户端已打开就被关闭了,楼主测试的时候是用手机测试还是用模拟器的?
模拟器不是默认可以连接网络的吗?
小弟刚入门,还请多指教14楼u0141562862015-04-2211:
56发表[回复]为什么安卓客户端已打开就被关闭了,楼主测试的时候是用手机测试还是用模拟器的?
模拟器不是默认可以连接网络的吗?
小弟刚入门,还请多指教13楼弱机菜鸟2014-12-1717:
09发表[回复]感谢楼主分享12楼Yellow5A52014-07-2502:
24发表[回复]谢谢楼主分享~
我有个问题想问,
就是只局限于局域网的话。
是不是手机wifi和电脑连接,然后是他们两个可以通信。
如果手机没有WiFi连接,就没办法通信,是吗?
?
Re:
tobacco2014-07-2511:
33发表[回复]回复u011035622:
只要手机能通过ip能访问到电脑就行,如果是固定ip的宽带网络,手机很容易就能与电脑通信。
11楼君子之邦2014-07-2108:
12发表[回复]有完整的工程源代码么?
你的源码我现在运行不了!
10楼看写写2014-04-2611:
11发表[回复].........大哥2.3.1也不能运行一运行就关闭...9楼1739282013-11-0217:
35发表[回复]大哥。
这东西能在4.0的系统上跑么?
?
老是自动关闭Re:
tobacco2013-11-0315:
30发表[回复]回复u012674984:
当初是为Android2.3写的8楼zipzip582013-07-1818:
44发表[回复]楼主~想请问一下..怎么样才能在4.1.2上跑这个程序啊7楼xiaoxuxiaoyi2013-07-1411:
40发表[回复]楼主,我想问一下,如果获取一个局域网内所有的IPRe:
tobacco2013-08-0210:
33发表[回复]回复xiaoxuxiaoyi:
这必须要局域网内其他设备会答复本设备的询问6楼happytaozs2013-03-1422:
49发表[回复]LZ你好,想问一下,你的手机和PC是在同一个局域网中吗?
我现在的PC是连在校园局域网上,属于内网,但是并不知道校园的公网IP,我想用Android手机与PC进行远程通信,比如说:
我在离学校很远的外地,用你的这种方法可以实现手机和PC通信吗?
(PS:
手机和PC不在同一个局域网内)Re:
tobacco2013-08-0210:
31发表[回复]回复happytaozs:
不在同一个局域网的话是不能直接用IP来通信的。
5楼y45398jp2012-11-0510:
30发表[回复]请问手机端的程序是允许在真机上还是模拟器上?
另外,手机连wifi了吗?
Re:
tobacco2012-11-0511:
08发表[回复]回复y45398jp:
真机和模拟器都可以运行,只要IP地址(或者域名)正确,并有网络连接就可以通信。
跟手机连不连wifi没有关系,没有wifi手机会自动通过gprs来发送数据的,只要有网络连接都可以正常运行的。
Re:
tobacco2012-11-0511:
08发表[回复]回复y45398jp:
真机和模拟器都可以运行,只要IP地址(或者域名)正确,并有网络连接就可以通信。
跟手机连不连wifi没有关系,没有wifi手机会自动通过gprs来发送数据的,只要有网络连接都可以正常运行的。
4楼y45398jp2012-11-0510:
27发表[回复]请问你的手机端程序是在真机上运行,还是在模拟器运行的?
另外,手机有没有连接到wifi?
3楼luffycheung2012-10-3110:
58发表[回复]想请教下lz
Socket("",5648)里的域名
可以换成主机IP吗?
Android客户端Wifi连接,和PC端socket通信可行吗?
Re:
tobacco2012-10-3112:
13发表[回复]回复zhd172:
可以换成主机IP。
Android客户端通过wifi连接,可以和PC通信,只要知道正确的PC的IP。
2楼tobacco2012-08-1019:
41发表[回复]当然在不同的工程里,服务端运行在pc上面,而客户端运行在Android手机设备上面。
服务端是普通java工程,客户端是Android2.3工程。
1楼v5tuandui2012-08-1016:
23发表[回复]服务端和客户端放在同一个工程里吗
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Android 手机 通过 socket pc 通信