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

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

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

@Override
	protected 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;

	@Override
	protected 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() {
			
			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub
				System.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 exception
					System.out.println(e1.toString());
				}finally{
					try {
						socket.close();
					} catch (Exception e2) {
						// TODO: handle exception
						e2.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{

	@Override
	public 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 exception
			e.printStackTrace();
		}
		
	}	
	
	
	public static void main(String[] args) throws Exception {
		new Thread(new Server()).start();
		
	}
}

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

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

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值