Android Socket通讯
来源:互联网 发布:mac怎么同时登陆2个qq 编辑:程序博客网 时间:2024/05/20 07:34
这里我给大家简单介绍利用socket通讯,里面包含了Handler刷新Ui操作
首先我们来看一下Android客户端的代码
下面是MainActivity类
package com.example.testsocket;
import java.io.UnsupportedEncodingException;
import org.apache.http.util.EncodingUtils;
import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
public class MainActivity extends Activity {
private EditText ed;
private Button but;
Handler h = new Handler(){
@Override
public void handleMessage(Message msg) {//建立handler对象刷新UI
// TODO Auto-generated method stub
super.handleMessage(msg);
switch(msg.what){
case 1:
Toast.makeText(MainActivity.this, msg.obj.toString(), Toast.LENGTH_SHORT).show();
break;
}
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
InitView();
}
public void InitView(){//初始化及监听
ed = (EditText)findViewById(R.id.input);
but = (Button)findViewById(R.id.bok);
but.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
java_socket joc = new java_socket(MainActivity.this,ed.getText().toString(),h);
new Thread(joc).start();//启动线程类(java_socket是一个线程类)
}
});
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
}
之后我们再看看线程类是如何操作的
package com.example.testsocket;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.BufferedWriter;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.net.Socket;
import java.net.UnknownHostException;
import org.apache.http.util.EncodingUtils;
import android.content.Context;
import android.os.Handler;
import android.os.Message;
import android.widget.Toast;
public class java_socket implements Runnable {
private Socket sok;//socket对象
private OutputStream os;//输出流用于向服务器传递数据
private String name;//传递服务器的名字
private BufferedOutputStream bos;
private InputStream ins;//输入流对象用于读取服务的字符串
private BufferedInputStream bin;
private Context con;//上下文对象
private Handler h;//Hnadler回掉
public java_socket(Context con,String name,Handler h) {
super();
this.name=name;
this.con=con;
this.h=h;
}
@Override
public void run() {//run方法
// TODO Auto-generated method stub
try {
sok = new Socket("192.168.1.109", 79);//服务器地址和端口号建立socket流对象
os = new DataOutputStream(sok.getOutputStream());//获取socket输出流用于向服务器传递数据
bos = new BufferedOutputStream(os);//包装流缓冲区
bos.write(name.getBytes("utf-8"));//向服务器传递数据
ins = new DataInputStream(sok.getInputStream());//获取socket输入流用于读取服务端传递过来的字符串
bin = new BufferedInputStream(ins);//包装输入流
byte by[] = new byte[1024];//字节缓冲区
int in=bin.read(by);//把数据读取到缓冲区并返回读取的字符个数
if(in!=-1){//如果读取的字符个数不为-1就建立message对象向主线程刷新UI
String str = EncodingUtils.getString(by, "utf-8");//将缓冲区的字节转换成UTF-8编码
Message ms = new Message();
ms.what=1;
ms.obj=str;
h.sendMessage(ms);
}
// TODO Auto-generated catch block
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
if(bos!=null){
try {
bos.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if(os!=null){
try {
os.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if(bin!=null){
try {
bin.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if(ins!=null){
try {
ins.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
}
下面是服务端代码
首先我们来看程序的入口类
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
public class mainSocket {
private Socket scoket;
private ServerSocket ser;
public void thread(){
try {
System.out.println("服务器已启动......");
ser = new ServerSocket(79);
while(true){
scoket = ser.accept();
System.out.println("以连接服务器");
test ttt = new test(scoket);
new Thread(ttt).start();
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static void main(String[] args) {
mainSocket m = new mainSocket();
m.thread();
}
}
下面我们再看看线程类
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;
import javax.imageio.stream.FileImageInputStream;
import org.apache.http.util.EncodingUtils;
import org.omg.CORBA.portable.OutputStream;
public class test implements Runnable{
private Socket sc;
private InputStream ins;
private BufferedInputStream br;
private DataOutputStream output;
private BufferedOutputStream bo;
public test(Socket sc) {
super();
this.sc = sc;
}
@Override
public void run() {
// TODO Auto-generated method stub
try {
ins = new DataInputStream(sc.getInputStream());
br = new BufferedInputStream(ins);
output = new DataOutputStream(sc.getOutputStream());
output.writeUTF("已成功连接服务器");
byte[] b = new byte[1024];
br.read(b);
if(br!=null){
String str = EncodingUtils.getString(b,"utf-8");
System.out.println(str);
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
if(ins!=null){
try {
ins.close();
} catch (Exception e2) {
// TODO: handle exception
}
if(output!=null){
try {
output.close();
} catch (Exception e2) {
// TODO: handle exception
}
}
}
}
}
}
最后我们不要忘了加入Internet权限
首先我们再来看一下效果图
- Android+socket+通讯
- Android 客户端socket通讯
- android socket 双向通讯
- android socket通讯
- Android Socket通讯
- android socket通讯过程?
- Android Socket通讯
- Android Socket通讯
- Android通讯-Socket
- Android中Socket通讯类
- Android Socket通讯基本用法
- android简单的socket通讯
- Android之Socket,Service通讯
- Android开发--Socket通讯解析
- Android 模拟器(JAVA)与C++ socket 通讯
- android与socket通讯(三)
- Android中Socket通讯类【Json】
- Android local socket 进程间通讯实验
- Unity3D-使用Bitmap Font Generator自定义字体
- Linux 字符设备驱动开发基础(二)—— 编写简单 PWM 设备驱动
- cJSON学习笔记 续集
- NSURLSession(Get & Post,JSON、XML数据解析,文件上传下载)
- 每周重拾两个Linux命令:ls ------>第一周
- Android Socket通讯
- Linux 字符设备驱动开发基础(四)—— ioctl() 函数解析
- BZOJ4555: [Tjoi2016&Heoi2016]求和
- Linux 字符设备驱动开发基础(一)—— 编写简单 LED 设备驱动
- maven学习(五)
- 安装ZooKeeper
- ubuntu 搜狗输入法安装
- 安装JStorm2.1.1
- Hi3515按键中断驱动程序