Socket服务端简单地API:

  • 主要用到以下几个API:ServerSocket用来设置端口号、accept用来和服务端连接、getInputStream用来获取输入流、read用来读取输入流里面的数据,存放在提前开辟好的缓冲区里面。
import java.io.IOException;
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;public class Main {public static void main(String[] args){byte[] data=new byte[128];int len=0;//创建套接字,设置IP和端口号try {ServerSocket socket =new ServerSocket(8887);//8888是端口号System.out.println("Socket套接字创建成功等待连接");Socket con=socket.accept(); //con相当于连接通道是Socket类型System.out.println("有客户端接入");InputStream in=con.getInputStream();//获取输入流,用来读取数据,返回值是InputStream类型len=in.read(data);System.out.println("读到消息:"+new String(data,0,len));//String()这个构造方法里面有基于Byte组建一个字符串//上面代表从第0个开始至第len个进行转化为字符串} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}//}
}

建立Socket单点多连接,实现数据的多次发送:

这个主要用一个while循环,不断接收客户端的接入,当有新的客户端接入的时候就会创建一个新的线程去和新接入的客户端对接,然后将接受的数据打印出来

import java.io.IOException;
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;public class Main {public static void main(String[] args){//创建套接字,设置IP和端口号try {ServerSocket socket =new ServerSocket(8887);//8888是端口号System.out.println("Socket套接字创建成功等待连接");while(true){//实现while循环不断接受连接final Socket con=socket.accept(); //con相当于连接通道是Socket类型,这里需要将其设置为final类型System.out.println("有客户端接入");new Thread(new Runnable() {public void run() {InputStream in;try {byte[] data=new byte[128];int len=0;in = con.getInputStream();len=in.read(data);System.out.println("读到消息:"+new String(data,0,len));//String()这个构造方法里面有基于Byte组建一个字符串//上面代表从第0个开始至第len个进行转化为字符串   } catch (IOException e) {//可能出现数据流读取错误,所以要设置异常处理// TODO Auto-generated catch blocke.printStackTrace();}//获取输入流,用来读取数据,返回值是InputStream类型}}).start();}} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}//}
}

Socket客户端实现收发数据:

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.Scanner;public class Main {public static void main(String[] args) {try {Socket Client=new Socket("192.168.43.227",8880); //去连接IP地址是192.168.43.227端口号是8887的服务器OutputStream out=Client.getOutputStream();       //用getOutputStream这个方法去发送数据返回值是OutputStream类型,就获得一个向外输出的一个通道System.out.println("请输入数据:");Scanner input=new Scanner(System.in);String message=input.next();out.write(message.getBytes());//message.getBytes将返回值转化为Byte类型的数组,进行发送//实现客户端接收数据byte[] data=new byte[128];int len;InputStream in=Client.getInputStream(); //获得数据接收通道len=in.read(data);System.out.println("获得服务端返回信息:"+new String(data,0,len));           } catch (UnknownHostException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}    }
}

实现安卓Socket给服务器传输数据:

  • 注意网络访问不可以放到主线程里面,否则会抛出异常
package com.fhn.socket;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.Scanner;import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;public class MainActivity extends Activity implements View.OnClickListener  {Button btn1;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);btn1=(Button)findViewById(R.id.b);btn1.setOnClickListener(this);}public void SendMessage(){try {String message="message from Andriod";Socket Client=new Socket("192.168.43.227",8881); //去连接IP地址是192.168.43.227端口号是8887的服务器OutputStream out=Client.getOutputStream();       //用getOutputStream这个方法去发送数据返回值是OutputStream类型,就获得一个向外输出的一个通道out.write(message.getBytes());//message.getBytes将返回值转化为Byte类型的数组,进行发送   } catch (UnknownHostException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}    }@Overridepublic void onClick(View arg0) {//因为网络访问不可以放到主线程里面,否则会抛出异常new Thread(new Runnable() {     @Overridepublic void run() {SendMessage(); }}).start();}
}

安卓非UI线程修改控件:

  • 睡眠不能在主线程里面睡眠,得另外开启一个线程,但是新建的线程不能去修改TextView,否则程序会崩掉
  • 使用Handler类去修改UI界面的控件,在另一个线程里面相当于发送消息到UI线程让其修改控件。
package com.fhn.fefsh;
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.TextView;public class MainActivity extends Activity implements View.OnClickListener{TextView text;Button btn1;Handler h;  //Handler是一个类int i=0;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);text=(TextView)findViewById(R.id.textview);btn1=(Button)findViewById(R.id.b1);btn1.setOnClickListener(this);h=new Handler(){@Overridepublic void handleMessage(Message msg) {//区分事件的类型,Handler有点像UI主线程的家里的电话,他接到电话后去处理其他进程无法处理的事件(比如说在其他线程修改UI)// TODO Auto-generated method stubsuper.handleMessage(msg);text.setText(String.valueOf(msg.arg1));}    };}@Overridepublic void onClick(View v) {// TODO Auto-generated method stubnew Thread(new Runnable() {@Overridepublic void run() {// TODO Auto-generated method stubfor (int i = 0; i <10; i++) {Message msg=new Message(); msg.arg1=i;//设置message的内容//打电话,去把UI要显示,要处理的事件交给UI线程的Handler去做h.sendMessage(msg);try {Thread.sleep(2000);//睡眠不能在主线程里面睡眠,得另外开启一个线程,但是新建的线程不能去修改TextView,否则程序会崩掉} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}}).start();}
}

安卓接收数据并刷新界面:

package com.fhn.fefsh;import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.Scanner;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.TextView;public class MainActivity extends Activity implements View.OnClickListener {TextView text;Button btn1;Handler h; // Handler是一个类@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);text = (TextView) findViewById(R.id.textview);btn1 = (Button) findViewById(R.id.b1);btn1.setOnClickListener(this);h = new Handler() {@Overridepublic void handleMessage(Message msg2) {// 区分事件的类型,Handler有点像UI主线程的家里的电话,他接到电话后去处理其他进程无法处理的事件(比如说在其他线程修改UI)// TODO Auto-generated method stubsuper.handleMessage(msg2);Bundle b=msg2.getData();text.setText(b.getString("data"));}};}@Overridepublic void onClick(View v) {// TODO Auto-generated method stubnew Thread(new Runnable() {@Overridepublic void run() {try {Socket Client = new Socket("192.168.43.227", 8883); // 去连接IP地址是192.168.43.227端口号是8887的服务器OutputStream out = Client.getOutputStream(); // 用getOutputStream这个方法去发送数据返回值是OutputStream类型,就获得一个向外输出的一个通道// 实现客户端接收数据byte[] data = new byte[128];int len;InputStream in = Client.getInputStream(); // 获得数据接收通道len = in.read(data);System.out.println("获得服务端返回信息:" + new String(data, 0, len));String getmsg = new String(data, 0, len);Message msg = new Message();Bundle bun = new Bundle();bun.putString("data", getmsg);msg.setData(bun);// 设置message的内容// 打电话,去把UI要显示,要处理的事件交给UI线程的Handler去做h.sendMessage(msg);try {Thread.sleep(1000);// 睡眠不能在主线程里面睡眠,得另外开启一个线程,但是新建的线程不能去修改TextView,否则程序会崩掉} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}} catch (UnknownHostException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}).start();}
}

WebView控件之自制浏览器App:

  • WebView概述: Android WebView在Android平台上是一个特殊的View,它能用来显示网页,这个WebView类可以被用来在app中仅仅显示一张在线的网页,当然还可以用来开发浏览器。WebView内部实现是采用渲染引擎(WebKit)来展示view的内容,提供网页前进后退、网页放大、缩小、搜索等功能。WebView是一个基于WebKit引擎、展现Web页面的控件,Android的WebView在低版本和高版本采用了不同的WebKit版本内核。
  • WebView的基本使用:①: 在布局文件中添加WebView控件 ②: 在代码中让WebView控件加载显示网页。当然,在这里,我们需要加载网络上的数据内容,因此还需要添加网络权限:<!-- 添加网络权限 --> <uses-permission android:name="android.permission.INTERNET" />
  • 实现从APP访问百度:
package com.fhn.baidu;
import android.app.Activity;
import android.os.Bundle;
import android.webkit.WebView;
import android.webkit.WebViewClient;
public class MainActivity extends Activity {WebView wb;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);wb=(WebView)findViewById(R.id.wv_webview);wb.loadUrl("http://www.baidu.com");wb.setWebViewClient(new WebViewClient());// //系统默认会通过手机浏览器打开网页,为了能够直接通过WebView显示网页,则必须设置}
}
  • EditText把回车键变成搜索
在xml文件中的EditText中添加android:imeOptions="actionSearch" 属性et_main_search.setOnKeyListener(new OnKeyListener() {//输入完后按键盘上的搜索键【回车键改为了搜索键】public boolean onKey(View v, int keyCode, KeyEvent event) {if(keyCode==KeyEvent.KEYCODE_ENTER){//改动回车键功能}return false;}});

实现自定义网址访问:

package com.fhn.baidu;import android.app.Activity;
import android.os.Bundle;
import android.view.KeyEvent;
import android.view.View;
import android.view.View.OnKeyListener;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.EditText;
import android.widget.Toast;public class MainActivity extends Activity {EditText edit1;WebView  wb;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);wb=(WebView)findViewById(R.id.wv_webview);wb.setWebViewClient(new WebViewClient());edit1=(EditText)findViewById(R.id.edittext);edit1.setOnKeyListener(new OnKeyListener() {//输入完后按键盘上的搜索键【回车键改为了搜索键】public boolean onKey(View v, int keyCode, KeyEvent event) {if(keyCode==KeyEvent.KEYCODE_ENTER){//修改回车键功能Toast.makeText(MainActivity.this, "回车", Toast.LENGTH_LONG).show();String str=edit1.getText().toString();System.out.println(str);wb.loadUrl(str);  }return false;}});
//        wb.loadUrl("http://www.baidu.com");
//        wb.setWebViewClient(new WebViewClient());// //系统默认会通过手机浏览器打开网页,为了能够直接通过WebView显示网页,则必须设置}
}

Java高级补充(Socket服务端、客户端)、Handler类、安卓Socket传数据、WebView相关推荐

  1. Java:socket服务端,socket服务端支持多连接,socket客户端,socket客户端支持发送和接受

    一.Java之socket服务端 新建一个Java工程 命名 给他先创建一个类 在类里面我们做一个main 这里面也需要,创建套接字,IP号,端口号 但是java中有一个类         Serve ...

  2. SpringBoot+SOCKET服务端客户端

    springBoot启动socket服务端 socket服务端简单实现实例 springBoot启动socket服务端 SOCKET服务端启动 SOCKET客户端连接测试 模拟业务处理线程类 模拟监测 ...

  3. JAVA SOCKET 服务端/客户端可随时从任意一方发消息的例子

    网上找到不少例子都是必须客户端先发送一个消息,服务端再回复一条消息.这样的方式对于服务端想主动发送消息给客户端就很不方便了. 研究了一下,发现主要是因为BufferedReader的时候用readli ...

  4. java iso8583 socket 服务_JAVA客户端amp;服务器的socket通信

    JAVA客户端&服务器的socket通信 socket是两台主机之间的一个连接通道,它可以完成七个基本操作: 发送远程机器 发送数据 接收数据 关闭连接 绑定端口 监听入站数据 再绑定端口上接 ...

  5. java mina tcp_Mina TCP服务端客户端 示例

    服务端代码:package com.xd.nms.example; import java.io.IOException; import java.net.InetSocketAddress; imp ...

  6. java学习(166):socket服务端和客户端连接

    socket服务端 import java.io.IOException; import java.net.ServerSocket; import java.net.Socket;//socket服 ...

  7. java web启动socket_javaweb启动时启动socket服务端代码实现

    这篇文章主要介绍了javaweb启动时启动socket服务端代码实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 说明:在javaweb项目启动的 ...

  8. Java socket服务端

    本文主要讲解java socket服务端通信内容,服务端监听客户端,并且获取客户端的消息. 监听的主要代码是一个while死循环,因为需要实现持续监听.读者可重点阅读MySocketServer 类的 ...

  9. Java Websocket实例【服务端与客户端实现全双工通讯】

    Java Websocket实例[服务端与客户端实现全双工通讯] 现很多网站为了实现即时通讯,所用的技术都是轮询(polling).轮询是在特定的的时间间隔(如每1秒),由浏览器对服务器发 出HTTP ...

最新文章

  1. Oracle排序中NULL值处理的五种常用方法
  2. Day 27: Restify —— 在Node.js中构建正确的REST Web服务
  3. 打开表时提示 Out of resources when opening file......错误解决
  4. PHP会话技术cookie
  5. Asp.net在IE10、IE11下事件丢失经验总结
  6. 解密:LL与LR解析 2(译,完结)
  7. 美国副教授现身说法:如何改变“只收藏不阅读”的习惯
  8. python给内置函数重命名_python – 以Pandas Groupby函数重命名列名
  9. Python 3.10 明年发布,看看都有哪些 PEP ?
  10. css一些需要注意的东西
  11. 寻找春天nbsp;九宫格日记-2012.03.09
  12. MCU固件升级的几种Flash划分方式
  13. 「无捆绑不锁页」极度纯净win10 64位专业版下载地址
  14. ES 矩阵查询(Adjacency matrix aggregation)
  15. ipad触摸测试软件,平板电脑屏幕灵敏度测试:iPad系列最出色
  16. MATLAB | sRGB图像的灰度转换算法
  17. 一元多项式加减法的C++实现
  18. 基于注解的Excel导出万能模板
  19. java计算机毕业设计在线小说系统源码+系统+mysql数据库+lw文档
  20. java最大值最小值_java算法-最大值、最小值

热门文章

  1. 【pyqt5学习】——tableWidget学习
  2. 学习笔记(08):Python网络编程并发编程-实现服务端可以对多个客户端提供服务
  3. 【数字信号处理】 第二章、时域中的离散时间信号
  4. 全局搜索快捷键_Windows 自带的聚合搜索来了,与 Mac 的 Spotlight 相比体验如何?...
  5. IP通信基础 实验三
  6. python numpy中sum()时出现负值
  7. Java动态代理深入解析
  8. 数据帧,数据包,报文段,报文,分组,数据包的概念和区别
  9. 怎样基于谷歌地图的Server缓存公布Image Service服务
  10. 情 人 节 快 乐