android socket 之间的信息交互

创建java项目

SocketServer.java

import java.net.ServerSocket;
import java.net.Socket;
import java.util.ArrayList;
import java.util.List;

public class SocketServer {

  private static ServerSocket serivce;

  

  public static void main(String[] args) throws IOException {

    socket1();
  }
  public static void socket1()throws IOException{
  serivce = new ServerSocket(30000);
  while (true) {
  //等待客户端连接
    Socket socket = serivce.accept();
    new Thread(new AndroidRunable(socket)).start();
  }
  }

}

创建使用线程

AndroidRunable.java

package cn.socket.server;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.Socket;

public class AndroidRunable implements Runnable{
Socket socket = null;

public AndroidRunable(Socket socket) {
this.socket = socket;
}

@Override
public void run() {
// 向android客户端输出hello worild
String line = null;
InputStream input;
OutputStream output;
String str = "你好!hello word";
try {
//向客户端发送信息
output = socket.getOutputStream();
input = socket.getInputStream();
BufferedReader bff = new BufferedReader(
new InputStreamReader(input));
output.write(str.getBytes("UTF-8")); //这个编码格式 可以使用gbk
output.flush();
//半关闭socket
socket.shutdownOutput();
//获取客户端的信息
while ((line = bff.readLine()) != null) {
System.out.print("\n"+line);
}
//关闭输入输出流
output.close();
bff.close();
input.close();
socket.close();

} catch (IOException e) {
e.printStackTrace();
}
}

}

点击运行 java

创建android 项目

MainActivity.java

package com.example.socketan;

import java.net.Socket;

import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;

public class MainActivity extends Activity implements View.OnClickListener{
private EditText edt_ip, edt_socket, edt_connect;
private Button btn_socket;
private String ip="192.168.12.6";
private int tcp=30000;
Socket socket = null;
String buffer = "";
String geted1;
// 定义与服务器通信的子线程
// ClientThread clientThread;
public Handler myHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
if (msg.what == 0x11) {
Bundle bundle = msg.getData();
edt_socket.append("server:"+bundle.getString("msg")+"\n");
}
}

};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
edt_ip = (EditText) findViewById(R.id.edt_ip);
edt_socket = (EditText) findViewById(R.id.edt_socket);
edt_connect = (EditText) findViewById(R.id.edt_connect);
btn_socket = (Button) findViewById(R.id.btn_socket);
btn_socket.setOnClickListener(this);
}

@Override
public void onClick(View view) {
if (view.getId() == R.id.btn_socket) {
geted1 = edt_connect.getText().toString();
edt_socket.append("client:"+geted1+"\n");
// 客户端启动ClientThread线程创建网络连接、读取来自服务器的数据
new MyThread(geted1,ip,tcp,myHandler).start();
}

}

}

创建android使用线程

MyThread.java

package com.example.socketan;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.InetSocketAddress;
import java.net.Socket;
import java.net.SocketTimeoutException;

import android.os.Bundle;
import android.os.Handler;
import android.os.Message;

public class MyThread extends Thread {
private String str,ip;
private int tcp;
Socket socket=null;
String buffer=null;
private Handler myHandler;
public MyThread(String str,String ip,int tcp,Handler myHandler){
this.str=str;
this.ip=ip;
this.tcp=tcp;
this.myHandler=myHandler;
}
@Override
public void run() {
super.run();
//定义消息
Message msg = new Message();
msg.what = 0x11;
Bundle bundle = new Bundle();
bundle.clear();
try {
//连接服务器 并设置连接超时为5秒
socket = new Socket();
socket.connect(new InetSocketAddress(ip, tcp), 5000);
//获取输入输出流
OutputStream ou = socket.getOutputStream();
BufferedReader bff = new BufferedReader(new InputStreamReader(
socket.getInputStream()));
//读取发来服务器信息
String line = null;
buffer="";
while ((line = bff.readLine()) != null) {
buffer = line + buffer;
}

//向服务器发送信息
ou.write(str.getBytes("gbk"));
ou.flush();
bundle.putString("msg", buffer.toString());
msg.setData(bundle);
//发送消息 修改UI线程中的组件
myHandler.sendMessage(msg);
//关闭各种输入输出流
bff.close();
ou.close();
socket.close();
} catch (SocketTimeoutException aa) {
//连接超时 在UI界面显示消息
bundle.putString("msg", "服务器连接失败!请检查网络是否打开");
msg.setData(bundle);
//发送消息 修改UI线程中的组件
myHandler.sendMessage(msg);
} catch (IOException e) {
e.printStackTrace();
} catch(Exception e){
e.printStackTrace();
}
}
}

时间: 2024-10-13 14:01:34

android socket 之间的信息交互的相关文章

fragment之间的信息交互——onActivityResult()不经过Activity

1.本文讲述如何fragment与fragment之间互传信息,不用使用Activity的onActivityResult()方法 核心思想:FirstFragment获取到SecondFragment的对象,然后调用SecondFragment的onActivityResult()方法 CrimeFragment.java private static final int REQUEST_DATE = 0; private static final String DIALOG_NAME = "

通过Android studio编写用户注册信息表单(实现用户交互)小demo

通过Android studio编写用户注册信息表单(实现用户交互)小demo,话不多说直接上小demo 1.activity_ main.xml中的约束布局设计原型样式图:  2.在模拟器中演示效果:  3.实现约束布局代码,代码存放在activity_ main.xml <?xml version="1.0" encoding="utf-8"?> <androidx.constraintlayout.widget.ConstraintLayou

【Android开发-9】信息时代,Activity和Activity怎么交流

前言:在信息时代,人们不必像古代人那样飞鸽传书,随便一个短信.微信.QQ.微博都可以和自己亲爱的小伙伴快速沟通交流.在这样眼花缭乱的信息时代,选择一种合适自己的沟通工具是很有必要的,Android中的Activity与Activity之间的传参方法也是很多种的,在项目中怎么选择信息交互方法,就看项目的需求和自己的经验. 弄例子之前需要了解一个东西:Intent; 书上和网上看到的概念解释都很多,但本人喜欢它的英文意思:意图.你的意图想干嘛,跟它说了就行.比如我要传参,那你在这个Intent中设置

Protobuf实现Android Socket通讯开发教程

本节为您介绍Protobuf实现Android Socket通讯开发教程,因此,我们需要先了理一下protobuf 是什么? Protocol buffers是一种编码方法构造的一种有效而可扩展的格式的数据. 谷歌使用其内部几乎RPC协议和文件格式的所有协议缓冲区. protobuf 适用的语言 正宗(Google 自己内部用的)的protobuf支持三种语言:Java .c++和Pyton,很遗憾的是并不支持.Net 或者 Lua 等语言,但社区的力量是不容忽视的,由于protobuf确实比J

Android:WebView与Javascript交互(相互调用参数、传值)

Android中可以使用WebView加载网页,同时Android端的java代码可以与网页上的javascript代码之间相互调用. 效果图: (一)Android部分: 布局代码: <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_widt

Android——武汉百纳信息(海豚浏览器)Android面试总结

一.最近由于某些原因,对目前的公司有点失望,于是一时冲动,产生了想回武汉的冲动,于是在某地方看到武汉百纳信息--也就是海豚浏览器的Android开发招聘的信息时,主动联系了对方,于是,得到了这次面试的机会.技术面前,跟他们的人力资源hr已经进行过一个多小时的电话沟通,总的来说给人的感觉就是,他们的面试不是那么容易的,他们的要求还是蛮高的,至少在一个多小时的hr交流中,得到的是这个信息.于是,约好了今天中午进行面试,一点钟,面试准时开始,最后总计花了40分钟.俗话说,有总结才有进步,每一次的面试都

Android 实现用户列表信息滑动删除功能和选择删除功能

在项目开发过程中,常常需要对用户列表的信息进行删除的操作.Android中常用的删除操作方式有两种 ,一种就是类似微信的滑动出现删除按钮方式,还有一种是通过CheckBox进行选择,然后通过按钮进行删除的方式.本来的实例集成上述的两种操作方式来实现用户列表删除的效果. 设计思路:在适配器类MyAdapter一个滑动删除按钮显示或隐藏的Map,一个用于CheckBox是否选中的Map和一个与MainAcitivyt进行数据交互的接口ContentsDeleteListener,同时该接口包含两个方

Android组件之间的信使——Intent

从一个Activity启动到另一个Activity可以使用startActivity()方法或者是startActivityForResult()方法 第一种:直接启动一个ActivityIntent intent = new Intent(Main.this, SecondActivity.class);startActivity(intent); 第二种:启动另一个Activity并返回结果作用:当从第二个Activity回跳到前一个Activity的时候,就不再需要使用startActiv

Android Socket 发送广播包的那些坑

Socket广播包经常被用于局域网内的两台设备之间互相发现和消息传递,在Android应用开发过程中,也经常会遇到这样的需求,例如:两台Android设备之间.Android与手环等智能硬件之间.Android与Windows电脑之间等等. 本文主要介绍在Android中使用Socket开发广播包程序时需要注意的编程事项,以及解决方法. 首先给出一段Android发送广播包的示例代码: DatagramSocket socket = new DatagramSocket(8000); socke