android使用socket进行本地PC通信
一、编写思路
手机端为客户端,PC为服务端,手机访问PC通信,需建立一个虚拟的通信链路,客户端通过socket发送请求到服务端,服务端通过serversocket监听来自客户端的socket请求,并生成一个socket。这样就建立了一条虚拟通信网络,然后再通过相关方法进行通信。项目需在服务端建立一个java程序,客户端建立一个android程序。
二、代码编写
(一) PC端的代码编写——java程序
(1)相关方法
Socket accept() :如果接收到一个来自客户端的socket的连接请求,该方法将返回一个与连接客户端对应的socket,否则该方法一直处于等待状态,线程也被阻塞。
Serversocket(int port ): 用指定的端口port来创建一个serversocket。该端口应该是一个有效的端口整数值:0 --65535 。查询PC的端口:提示命令符下输入
netstat -na ,选择上面没有的端口。
(2)java代码
package com.myServer;
import
java.io.IOException;
import java.io.OutputStream;
import java.net.ServerSocket;
import
java.net.Socket;
public class myServer {
/**
* @param args
*/
public static void main(String[] args) throws
IOException {
// TODO Auto-generated method stub
// 创建一个serversocket,用于监听客户端socket的连接请求
ServerSocket ss = new ServerSocket(3000);
// 采用循环不断接受来自客户端的请求
while (true)
{
// 每当接受到客户端socket的请求,服务端也产生一个socket
Socket s = ss.accept();
OutputStream os =
s.getOutputStream();
os.write("您好,您收到了服务器的信念祝福\n".getBytes("utf-8"));
// 关闭输出流,关闭socket
os.close();
s.close();
}
}
}
(二)android程序
(1)MainActivity.java
package com.myServer;
import
java.io.IOException;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
public class myServer {
/**
* @param
args
*/
public
static void main(String[] args) throws IOException {
// TODO Auto-generated
method stub
// 创建一个serversocket,用于监听客户端socket的连接请求
ServerSocket ss =
new ServerSocket(3000);
// 采用循环不断接受来自客户端的请求
while (true)
{
// 每当接受到客户端socket的请求,服务端也产生一个socket
Socket s =
ss.accept();
OutputStream os = s.getOutputStream();
os.write("您好,您收到了服务器的信念祝福\n".getBytes("utf-8"));
//
关闭输出流,关闭socket
os.close();
s.close();
}
}
}
(2)activity_main.xml
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/LinearLayout1"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity"
>
<EditText
android:id="@+id/show"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:editable="false"
android:cursorVisible="false"
/>
</LinearLayout>
(3)AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest
xmlns:android="http://schemas.android.com/apk/res/android"
package="com.myclient"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="14" />
<uses-permission android:name="android.permission.INTERNET" />
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name="com.myclient.MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER"
/>
</intent-filter>
</activity>
</application>
</manifest>