android socket编程手机做服务端,Android手机终端与PC实现socket通讯 Socket编程

编程入门 行业动态 更新时间:2024-10-11 09:29:30

android socket编程<a href=https://www.elefans.com/category/jswz/34/1769814.html style=手机做服务端,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编程

本文发布于:2024-03-06 03:07:36,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1714191.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:手机   终端   服务端   通讯   android

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!