android手机客户端连接服务器实现交互

来源:互联网 发布:Js用键盘实现图片切换 编辑:程序博客网 时间:2024/04/30 11:25

这几天想做一个android手机客户端连接PC服务器实现聊天功能的小程序,无奈客户端连接服务器就出现了问题,最后终于连接成功。其中遇到了两个问题,1、android版本问

题,我手机版本是5.0而我eclipse里面项目版本是4.3,会提示android.os.NetworkOnMainThreadException错误,解决办法在onCreate方法下面加一段代码,

@Overrideprotected void onCreate(Bundle savedInstanceState) {  StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder() .detectDiskReads() .detectDiskWrites() .detectNetwork() // 这里可以替换为detectAll() 就包括了磁盘读写和网络I/O .penaltyLog() //打印logcat,当然也可以定位到dropbox,通过文件保存相应的log .build()); StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder() .detectLeakedSqlLiteObjects() //探测SQLite数据库操作.penaltyLog() //打印logcat .penaltyDeath() .build()); super.onCreate(savedInstanceState);setContentView(R.layout.activity_socket_);


1、ip地址的问题,不同于本地测试,android手机连接PC端要求在同一个网络下面,最好是共享一个网络,但是当我用360wifi共享同一个网络后还是现实连接不成功,最后选择了我的实验室网址才连接成功,



最后附上利用socket套接字编程实现android手机连接服务器的源代码;

import java.io.BufferedReader;import java.io.BufferedWriter;import java.io.InputStreamReader;import java.io.OutputStreamWriter;import java.io.PrintWriter;import java.net.InetSocketAddress;import java.net.Socket;import java.net.SocketAddress;import android.os.Bundle;import android.os.StrictMode;import android.app.Activity;import android.view.Menu;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.EditText;import android.widget.TextView;public class Socket_Activity extends Activity {private TextView text;private Button button;private EditText editext;@Overrideprotected void onCreate(Bundle savedInstanceState) {  StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder() .detectDiskReads() .detectDiskWrites() .detectNetwork() // 这里可以替换为detectAll() 就包括了磁盘读写和网络I/O .penaltyLog() //打印logcat,当然也可以定位到dropbox,通过文件保存相应的log .build()); StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder() .detectLeakedSqlLiteObjects() //探测SQLite数据库操作.penaltyLog() //打印logcat .penaltyDeath() .build()); super.onCreate(savedInstanceState);setContentView(R.layout.activity_socket_);text = (TextView)findViewById(R.id.text);button = (Button)findViewById(R.id.button);button.setText(R.string.button);editext = (EditText)findViewById(R.id.editText);button.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {// TODO Auto-generated method stubSystem.out.println("click....");Socket socket = null;try {socket = new Socket(); System.out.println("2222");            socket.connect(new InetSocketAddress("192.168.1.100", 5333), 10000);  System.out.println("socket-->"); // 将信息通过这个对象来发送给Server   PrintWriter printWriter = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())),true);// 把用户输入的内容发送给server String toString = editext.getText().toString();printWriter.println(toString);printWriter.flush();// 接收服务器信息   BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(socket.getInputStream()));// 得到服务器信息 String msg = bufferedReader.readLine();// 在页面上进行显示 text.setText(msg);} catch (Exception e1) {// TODO: handle exceptionSystem.out.println(e1.toString());}finally{try {socket.close();} catch (Exception e2) {// TODO: handle exceptione2.printStackTrace();}}}});}}
服务器端就是普通java代码

import java.io.BufferedReader;import java.io.BufferedWriter;import java.io.InputStreamReader;import java.io.OutputStreamWriter;import java.io.PrintStream;import java.io.PrintWriter;import java.net.ServerSocket;import java.net.Socket;public class Server implements Runnable{@Overridepublic void run() {try {ServerSocket serverSocket = new ServerSocket(5333);while(true){// 等待接受客户端请求 System.out.println("server starting....");Socket client = serverSocket.accept();System.out.println("received");// 接受客户端信息 BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(client.getInputStream()));// 发送给客户端的消息 PrintWriter printWriter = new PrintWriter(new BufferedWriter(new OutputStreamWriter(client.getOutputStream())),true);// 读取客户端的信息 String string = bufferedReader.readLine();System.out.println(string);if(string!=null){printWriter.println("end"+string);printWriter.flush();}client.close();}} catch (Exception e) {// TODO: handle exceptione.printStackTrace();}}public static void main(String[] args) throws Exception {new Thread(new Server()).start();}}

最后别忘了加一个访问权限

<uses-permission android:name="android.permission.INTERNET"/>

1 0
原创粉丝点击