- 浏览: 26414 次
- 性别:
- 来自: 武汉
最新评论
需要用到的权限
<uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" /> <uses-permission android:name="android.permission.WAKE_LOCK" />
service端
public class MainActivity extends Activity { private Button start = null; private EditText bufferText = null; private Button send = null; private ServerThread serverThread = null; private String sendBuffer = null; private String receiveBuffer = null; private TcpSocketServer tss = null; private TextView receiveView = null; private Handler handler = new Handler(){//线程与UI交互更新界面 public void handleMessage(Message msg){ receiveView.setText(receiveBuffer); Toast.makeText(MainActivity.this, receiveBuffer, Toast.LENGTH_SHORT).show(); } }; private String intToIp(int i) { return (i & 0xFF ) + "." + ((i >> 8 ) & 0xFF) + "." + ((i >> 16 ) & 0xFF) + "." + ( i >> 24 & 0xFF) ; } protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //获取wifi服务 WifiManager wifiManager = (WifiManager) getSystemService(Context.WIFI_SERVICE); //判断wifi是否开启 if (!wifiManager.isWifiEnabled()) { wifiManager.setWifiEnabled(true); } WifiInfo wifiInfo = wifiManager.getConnectionInfo(); int ipAddress = wifiInfo.getIpAddress(); String ip = intToIp(ipAddress); TextView tv=(TextView) findViewById(R.id.ip); tv.setText("本机IP:"+ip); receiveView = (TextView)this.findViewById(R.id.receiveID); start = (Button) this.findViewById(R.id.startID); //监听服务器开启 start.setOnClickListener(new OnClickListener() { public void onClick(View arg0) { if(serverThread == null){ EditText portEditText = (EditText)MainActivity.this.findViewById(R.id.portID); String port = portEditText.getText().toString().trim(); serverThread = new ServerThread(port); serverThread .start(); Toast.makeText(MainActivity.this, port, Toast.LENGTH_SHORT).show(); } }}); send = (Button)this.findViewById(R.id.sendID); bufferText = (EditText)this.findViewById(R.id.bufferID); //监听发送信息 send.setOnClickListener(new OnClickListener() { public void onClick(View v){ sendBuffer = bufferText.getText().toString().trim(); if(sendBuffer != null)//为了避免线程把它弄为buffer = null; Toast.makeText(MainActivity.this, sendBuffer, Toast.LENGTH_SHORT).show(); } }); } class ServerThread extends Thread{ private int port; public ServerThread (String port){ this.port = Integer.parseInt(port); } public void run(){ //建立服务端 if(tss == null) tss = new TcpSocketServer(this.port); new Thread(new WriteThread()).start();//开启“写”线程 new Thread(new ReadThread()).start();//开启“读”线程 } private class ReadThread implements Runnable{ public void run(){ while(true){ if((receiveBuffer = tss.getMessage()) != null){//收到不为null的信息就发送出去 handler.sendEmptyMessage(0); } } } } private class WriteThread implements Runnable{ public void run(){ while(true){ try { //发送数据 if(sendBuffer != null){ //tss.sendMessage(1821,buffer); tss.sendMessage(sendBuffer); sendBuffer = null;//清空,不让它连续发 } } catch (Exception e) { e.printStackTrace(); } } } } } }
public class TcpSocketServer { private ServerSocket ss =null; private Socket s = null; private OutputStream out = null; private InputStream in = null; private String receiveBuffer = null; public TcpSocketServer(int port){ //新建ServerSocket对象,端口为传进来的port; try { //ss= new ServerSocket(1821); System.out.print("no"); ss = new ServerSocket(port); System.out.print("yes"); s = ss.accept(); out = s.getOutputStream(); in = s.getInputStream(); } catch (IOException e) { e.printStackTrace(); } } public void sendMessage(String buffer)throws Exception{ //新建Socket通信对象,接受客户端发来的请求accept(); //Socket s = ss.accept(); //创建输入流对象InputStream InputStream bais = new ByteArrayInputStream(buffer.getBytes()); byte[] buff = new byte[1024]; bais.read(buff); out.write(buff); out.flush(); } public String getMessage(){ byte[] temp = new byte[1024]; try{ if(in.read(temp) > 0) { return receiveBuffer = new String(temp).trim(); }} catch (IOException e) { e.printStackTrace(); } return null; } public String receiveMessage(){ return null; } }
client端
public class MainActivity extends Activity { private EditText ipEdit = null; private EditText portEdit = null; private EditText buffEdit = null; private Button startButton = null; private Button sendButton = null; private TextView receiveView = null; private Socket s = null; private byte[] receiveBuffer = new byte[1024]; private String sendBuffer = new String(); private String ip = null; private int port ; private int cmdCount = 0; private Handler handler = new Handler(){//线程与UI交互更新界面 public void handleMessage(Message msg){ receiveView.setText(new String(receiveBuffer).trim()); Arrays.fill(receiveBuffer, (byte)0);//清空 } }; protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); this.init(); /*开启socket通信*/ startButton.setOnClickListener(new OnClickListener() { public void onClick(View v) { if(s == null){//这里要设置验证!!!!!!!!! /*设定ip和port*/ ip = ipEdit.getText().toString(); port = Integer.parseInt(portEdit.getText().toString()); /*开启socket线程*/ new Thread(new SocketClientControl(ip,port)).start(); } Toast.makeText(MainActivity.this, "服务器连接成功", Toast.LENGTH_SHORT).show(); } }); /*发送数据*/ sendButton.setOnClickListener(new OnClickListener(){ public void onClick(View v) { if(s != null) sendBuffer = buffEdit.getText().toString(); Toast.makeText(MainActivity.this, "send -> "+sendBuffer, Toast.LENGTH_SHORT).show(); } }); } private void init(){ startButton = (Button) this.findViewById(R.id.startID); sendButton = (Button) this.findViewById(R.id.sendID); ipEdit = (EditText) this.findViewById(R.id.ipID); portEdit = (EditText) this.findViewById(R.id.portID); buffEdit = (EditText) this.findViewById(R.id.buffID); receiveView = (TextView) this.findViewById(R.id.recieiveID); } private class SocketClientControl implements Runnable{ private InputStream in = null; private OutputStream out = null; public SocketClientControl(){ } public SocketClientControl(String ip,int port){ try { s = new Socket(ip,port);//获得链接 in = s.getInputStream();//获得输入流 out = s.getOutputStream();//获得输出流 } catch (IOException e) { e.printStackTrace(); System.exit(-1);//要是出问题,就线程退出 } } public void run(){ new Thread(new WriteThread()).start();//开启“写”线程 new Thread(new ReadThread()).start();//开启“读”线程 } private class ReadThread implements Runnable{ public void run() { while(true){ try { if(in.read(receiveBuffer) > 0){//等待命令的输入 cmdCount ++; ; handler.sendEmptyMessage(0);//发送信息,更新UI } } catch (IOException e) { e.printStackTrace(); } } } } private class WriteThread implements Runnable{ public void run(){ while(true){ if(!sendBuffer.equals("")){ try { out.write(sendBuffer.getBytes());//输出 out.flush();//输出刷新缓冲 } catch (IOException e) { e.printStackTrace(); } sendBuffer = ""; } } } } } }
public class SocketClientSingle { private static Socket s = null; private SocketClientSingle() { } public static Socket getSocket(String ip,int port){ try { s = new Socket(ip,port); } catch (UnknownHostException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } return s; } }
发表评论
-
ImageLoaderTools图片异步双缓存下载工具
2014-09-12 11:31 699package com.cnki.client.utils; ... -
CookiesTools 网络通讯工具类
2014-09-12 11:29 638package com.cnki.client.utils; ... -
BitmapTools图片处理工具类
2014-09-12 11:25 1007package com.cnki.client.utils; ... -
自动更新版本
2014-09-12 11:21 597Android 应用自动更新代码 import java.i ... -
Android 获取ip地址
2013-07-24 15:41 850获取ip地址 1.使用WIFI 首先设置用户权限 <us ... -
Android网络连接判断与处理
2013-07-17 17:20 781获取网络信息需要在AndroidManifest.xml文件中 ... -
判断当前网络是否可用和调用系统设置wifi界面
2013-07-17 16:48 833需要用到的权限 <uses-permission and ... -
获取系统版本内核版本信息
2013-07-09 12:55 2232private static final String L ...
相关推荐
### 局域网内实现WIFI的两种方法详解 #### 方法一:通过WAN口连接无线路由器实现WIFI功能 **第一步:物理连接** - 将一根网线从局域网内的交换机接入无线路由器的WAN口。 - 另一根网线连接计算机到无线路由器的...
在同一个局域网内的设备可以通过TCP/IP协议进行通信。TCP(传输控制协议)负责确保数据的可靠传输,IP(互联网协议)则负责将数据包从一个设备路由到另一个设备。常见的文件传输协议有FTP(文件传输协议)、HTTP(超...
在现代技术领域,WiFi局域网内的双向语音实时通话已经成为日常生活和..."wifi下双向语音通讯.apk"这样的应用程序就是这一技术的具体体现,它将这些知识点融入到实际产品中,让用户能够轻松享受到高质量的语音通话体验。
在Android平台上实现两个手机间的通信是一项常见的需求,可以用于数据共享、实时聊天或者协同操作等场景。本篇文章将深入探讨如何实现这样的功能,主要涉及以下几个关键知识点: 1. **蓝牙通信**:Android提供了...
【标题】"利用UDP实现局域网通信"的知识点涵盖了两个主要方面:UDP协议和局域网通信。UDP(User Datagram Protocol)是一种无连接的、不可靠的传输层协议,常用于实时数据传输,如音频、视频流媒体,因为它的低延迟...
可以实现手机之间连接WIFI情况下局域网实时传送文件,支持自建WIFI热点
1:两个手机需要在同一个局域网里面 2:修改客户端ClientTest里面的IP地址,IP地址设置为作为服务端的手机的IP地址 3:androidSocketTest 为服务端,要安装到一个手机里并先运行起来,会显示本机IP地址,显示Client传...
本项目是一个安卓手机之间通过wifi通讯的项目源码包括安卓...需要两个安卓端都在一个局域网内并且先启动服务端两台手机wifi互连.rar,太多无法一一验证是否可用,程序如果跑不起来需要自调,部分代码功能进行参考学习。
在Android平台上,实现基于局域网的Socket通信是一项常见的任务,尤其在开发涉及设备间通信的应用时。Socket通信允许两台设备通过网络连接直接交换数据,而无需中间服务器。在这个项目中,我们关注的是Android设备...
在本场景中,"android基于socket两个手机之间进行通信"意味着我们需要在两台Android设备上建立TCP连接,共享局域网内的IP地址来实现数据交互。 首先,理解Socket的基本概念至关重要。Socket分为服务器端...
在现代移动设备中,尤其是Android手机,通过Wi-Fi进行数据传输已经成为日常生活和工作中不可或缺的一部分。Wi-Fi技术不仅用于网络连接,还可以实现设备间的短距离数据共享。本文将深入探讨如何利用Android系统的架构...
"WiFi热点 局域网虚拟WiFi"这个标题所指的就是利用特定的技术或工具在Windows系统上创建一个虚拟的无线网络接入点,允许其他设备通过WiFi连接到同一个网络。描述中提到的“局域网虚拟WiFi神器”可能是一款软件,它...
使用Cisco Packet Tracer实现两个局域网通信,亲自测试可以使用
局域网通讯软件是计算机网络技术中的一个重要应用,它使得在同一局域网内的设备能够实现高效、便捷的数据交互。本文将深入探讨局域网通讯软件的设计原理和实现方法,以及如何利用此类软件进行文件传输、聊天和广播...
在IT领域,局域网(LAN)WiFi Android聊天应用程序是一个常见的项目,它允许在同一网络下的Android设备之间进行即时通信。这个应用通常利用Wi-Fi连接,而不是依赖于互联网,因此可以在没有移动数据的情况下进行本地...
在这个项目中,开发者利用了Android系统的APIs来实现手机搜索热点、创建热点以及通过socket进行数据传输,从而达到聊天的目的。下面将详细解析这些关键技术点。 首先,我们要理解WIFI热点的概念。WIFI热点是通过...
Android WiFi Camera是一款基于Android平台的应用程序,它将用户的Android设备转变为一个无线局域网(WLAN)IP摄像头。这个应用程序允许用户通过WiFi网络在不同设备上实时查看、控制和记录来自Android设备的视频流,...
这个项目"基于android的wifi热点的局域网通讯仿飞鸽"就是这样一个示例,旨在模拟飞鸽传书的通信功能。下面将详细探讨涉及的知识点。 1. **Android WiFi热点**: Android系统提供了开启和管理WiFi热点的功能。通过`...
这个"android即时通讯APP程序.rar"压缩包提供了实现局域网内两个客户端之间通讯的基础源码,主要包括两个核心文件:MainActivity.java和NetWorkUtils.java。 `MainActivity.java`通常是Android应用的主入口类,它...
飞秋(FeiQ)是一款免费的局域网即时通讯软件,它的主要特点是无需互联网连接,仅需在同一局域网内即可实现用户之间的实时通讯。飞秋支持文字聊天、文件传输、群组聊天、公告发布等功能,尤其适合于企业内部的日常...