手机做服务端,Android手机终端与PC实现socket通讯 Socket编程"/>
android socket编程手机做服务端,Android手机终端与PC实现socket通讯 Socket编程
预置条件:
1.Android手机和PC位于同一局域网,手机为客户端,PC为服务器
2.开发平台为Eclipse+android 4.4.2, PC端为Windows XP
Android端源码:
package com.example.socketclientapp;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.Socket;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
/**
* 测试Android客户端与PC服务器通过socket进行交互
* 客户端:把用户输入的信息发送给服务器
* @author Ameyume
*
*/
public class MainActivity extends Activity {
private final String DEBUG_TAG = "Activity01";
private TextView mTextView = null;
private EditText mEditText = null;
private Button mButton = null;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mButton = (Button) findViewById(R.id.Button01);
mTextView = (TextView) findViewById(R.id.TextView01);
mEditText = (EditText) findViewById(R.id.EditText01);
// 登陆
mButton.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
new Thread() {
@Overridepublic void run() {
Socket socket = null;
String message = mEditText.getText().toString();
try {
// 创建Socket
socket = new Socket("192.168.2.216", 5431);
// 向服务器发送消息
PrintWriter out = new PrintWriter(
new BufferedWriter(new OutputStreamWriter(
socket.getOutputStream())), true);
out.println(message);
// 接收来自服务器的消息
BufferedReader br = new BufferedReader(
new InputStreamReader(socket
.getInputStream()));
String msg1 = br.readLine();
if (msg1 != null) {
mTextView.setText(msg1);
} else {
mTextView.setText("数据错误!");
}
// 关闭流
out.close();
br.close();
// 关闭Socket
socket.close();
} catch (Exception e) {
// TODO: handle exception
Log.e(DEBUG_TAG, e.toString());
}
}
}.start(); }
});
}
}
红色部分代码看明白就可以了,注意:
1.Android 4.0后,为避免ANR,规定网络访问不能放置在主线程中,必须另外开启线程;以免出现android.os.NetworkOnMainThreadException。
2.Android 4.0后,使用了副线程后,不需要使用StrictMode;
3.代码部分中的IP和端口请根据自身情况修改;
Manifest.xml如下,务必增加红色部分权限,以免出现权限java.SocketException: socket failed: EACCES (Permission denied)异常
package="com.example.socketclientapp"
android:versionCode="1"
android:versionName="1.0" >
android:minSdkVersion="8"
android:targetSdkVersion="21" />
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
android:name=".MainActivity"
android:label="@string/app_name" >
PC端代码如下:
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.ServerSocket;
import java.Socket;
/**
* 测试Android客户端与PC服务器通过socket进行交互 服务器端:接收客户端的信息并回送给客户
*
* @author Ameyume
*
*/
public class Server implements Runnable {
public void run() {
try {
// 创建ServerSocket
ServerSocket serverSocket = new ServerSocket(5431);
while (true) {
// 接受客户端请求
Socket client = serverSocket.accept();
System.out.println("accept");
try {
// 接收客户端消息
BufferedReader in = new BufferedReader(
new InputStreamReader(client.getInputStream()));
String str = in.readLine();
System.out.println("read:" + str);
// 向服务器发送消息
PrintWriter out = new PrintWriter(new BufferedWriter(
new OutputStreamWriter(client.getOutputStream())),
true);
out.println("server message");
// 关闭流
out.close();
in.close();
} catch (Exception e) {
System.out.println(e.getMessage());
e.printStackTrace();
} finally {
// 关闭
client.close();
System.out.println("close");
}
}
} catch (Exception e) {
System.out.println(e.getMessage());
}
}
// main函数,开启服务器
public static void main(String a[]) {
Thread desktopServerThread = new Thread(new Server());
desktopServerThread.start();
}
}
注意:
1.本程序可以在Eclipse中编辑,并编译生成Server.class;
2.使用java Server命令来执行;
3.请设置好classpath, 如同:%JAVA_HOME%\lib;%JAVA_HOME%\lib\tools.jar;%JAVA_HOME%\bin;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;以免执行时找不到主类。
就这些啦,执行结果如下:
更多推荐
android socket编程手机做服务端,Android手机终端与PC实现socket通讯 Socket编程
发布评论