ackage cn.yutouxiuxiu.java.remoteslide;
import javax.swing.ImageIcon;
public class MainFrame extends javax.swing.JFrame {
private long count = 0;
public MainFrame() {
initComponents();
this.setTitle("无线幻灯片");
slide.setIcon(new ImageIcon("noconnection.jpg")); //开始显示无连接
}
@SuppressWarnings("unchecked")
//
private void initComponents() {
jPanel1 = new javax.swing.JPanel();
buttonListen = new javax.swing.JButton();
editPort = new javax.swing.JTextField();
textPort = new javax.swing.JLabel();
slide = new javax.swing.JLabel();
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
setBackground(new java.awt.Color(255, 255, 255));
jPanel1.setBackground(new java.awt.Color(255, 255, 255));
buttonListen.setText("开始监听");
buttonListen.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
buttonListenActionPerformed(evt);
}
};
editPort.setText("7788");
textPort.setText("端口:");
private void buttonListenActionPerformed(java.awt.event.ActionEvent evt) {
/* 开启电脑端监听线程 */
ServerThreadserverThread=new ServerThread(Integer.parseInt(editPort.getText()), this);
new Thread(serverThread).start();
}
/**
* 显示正在加载
*/
public void displayLoading() {
slide.setIcon(new ImageIcon("loading.jpg"));
}
/**
* 显示新幻灯片
*/
public void displayNewSlide() {
slide.setIcon(new ImageIcon("slide/" + count + ".jpg"));
count++;
}
4.2 WLAN下的Android手机与电脑的Socket通信
安卓系统手机可以通过便携式WLAN热点和电脑通过socket通信。手机做服务端,电脑做客户端;也可以反过来,电脑做服务端,手机做客户端。
4.2.1 WiFi技术的研究
无线通信(Wireless Communication)是指利用无线电波进行通信的一种通信方式。术语"无线"是指非广播通信,即使用便携式或移动式通信设备的个人之间通信。无线通信是在电子通信领域发展最快的分支,是通信领域最活跃的一部分,在各方面得到广泛的运用。
早期的无线系统使用的是最原始的功率很强的间歇式放电发射器,它仅用于无线电报。德福雷斯特在1860年发明了真空三极管,实现了对连续信号进行调制,并可用于语音传输。商业化的无线广播于1920年开始在美国和加拿大开始运营。二次世界大战后,美国电报电话公司在1946年推出了移动电话系统,它可以自动把移动用户接入到公共电话交换网,1947年美国开通了民用波段(CB)无线电台系统,这两个系统预示着现代无线通信时代的到来。
现在无线通信技术的应用已深入到人们生活和工作的每个角落,手机、平板电脑等便携式移动通信设备的使无处不在。3G、WLAN、数字电视等技术都是无线通信技术的热门应用。
Wi-Fi是Wi-Fi联盟制造商的商标可做为产品的品牌认证,用于对一个建立于IEEE 802.11标准的无线局域网络(WLAN)设备的认证。通过Wi-Fi认证的无线局域网络设备必须符合IEEE 802.11标准,IEEE 802.11标准定义了介质访问接入控制层和物理层。物理层定义了工作在2.4GHz的ISM频段上的两种无线调频方式和一种红外传输的方式,总数据传输速率设计为2Mbit/s。两个设备之间的通信可以自由直接(ad hoc)的方式进行,也可以在基站(Base Station,BS)或者访问点(Access Point,AP)的协调下进行。
从IEEE 802.11标准可以看出符合这种标准的设备具有无线通信和传输带宽大的特点,所以Wi-Fi也被都称为无线宽带。可以这么说,Wi-Fi代表了当今无线通信技术的最高水平,很多公共场所已经有Wi-Fi网络覆盖,这意味着可以通过Wi-Fi设备流畅地访问互联网,这将是通信领域的一个重要的发展里程碑。目前出产的平板电脑等设备几乎都集成了Wi-Fi功能。
4.2.2 Socket网络通信
下面介绍的是手机作为服务端,电脑作为客户端,使用NetBeans IDE 7.3进行编程的有关事项。
原理是,手机建立一个ServerSocket,并获取自己的IP地址和端口号(port);然后电脑通过Socket连接手机的IP地址与端口号(IP:port)。图4.5和4.6为无线网络链接状态信息。
图4.5 无线网络链接状态
图4.6 无线网络链接详细信息
1.手机建立通信线程代码:
package cn.yutouxiuxiu.android.remoteslide;
import java.io.FileInputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
public class SendThread implements Runnable {
private String ip;
private int port;
private String slide;
private long slideId;
private Socket socket;
SendThread(String ip, int port, String slide, long slideId) {
this.ip = ip;
this.port = port;
this.slide = slide;
this.slideId = slideId;
}
@Override
public void run() {
/* 传输图片到电脑端 */
try {
socket = new Socket(ip, port); //socket连接
//发送图像
FileInputStream fis = new FileInputStream("/sdcard/remoteslide/" + slide + "/" + slideId + ".jpg");
OutputStream out = socket.getOutputStream();
byte[] buf = new byte[1024];
int lenth = 0;
while ((lenth = fis.read(buf)) != -1) {
out.write(buf, 0, lenth);
}
socket.shutdownOutput();
//接收返回的数据
InputStream in = socket.getInputStream();
byte[] bufIn = new byte[1024];
int num = in.read(bufIn);
System.out.println(new String(bufIn, 0 ,num));
fis.close();
socket.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
2.电脑端建立通信线程代码
package cn.yutouxiuxiu.java.remoteslide;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.io.File;
/** * 服务器端监听线程
* @author Administrator
*/
public class ServerThread implements Runnable{
private int port;
private MainFrame mainFrame;
private long count = 0;
public ServerThread(int port, MainFrame mainFrame) {
this.port = port;
this.mainFrame = mainFrame;
}
@Override
public void run(){
try {
System.out.println("开始监听");
delAllFile("slide/"); //清空幻灯片临时文件夹内容
ServerSocket ss = new ServerSocket(port);
/* 接收数据并写入文件中 */
while (true) {
Socket s = ss.accept(); //等待手机端连接
/* 接收图像 */
System.out.println("等待接收图像");
mainFrame.displayLoadin
上一篇:基于Android的海南风景猜猜看软件的开发与研究
下一篇:试论APP广告在手机中的应用