博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android简单实现Socket通信,client连接server后,server向client发送文字数据
阅读量:5121 次
发布时间:2019-06-13

本文共 2737 字,大约阅读时间需要 9 分钟。

案例实现的是简单的Socket通信,当client(Androidclient)连接到指定server以后,server向client发送一句话文字信息(你能够拓展其他的了) 先看一下服务端程序的实现吧 Server.java
import java.io.IOException;import java.io.OutputStream;import java.net.ServerSocket;import java.net.Socket;public class Server {/*** @param args* @throws IOException*/public static void main(String[] args) throws IOException {// TODO Auto-generated method stub// 创建一个ServerSocket,用于监听clientsocket的连接请求ServerSocket ss = new ServerSocket(30000);// 採用循环不断接受来自client的请求,server端也相应产生一个Socketwhile (true) {Socket s = ss.accept();OutputStream os = s.getOutputStream();os.write("你好,由于你上线了,所以server发给了你这条信息".getBytes("utf-8"));os.close();s.close();}}}
接下来实现的就是手机client的上线并接收数据了,看一下 MainActivity.java
package com.example.socket;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.net.Socket;import java.net.UnknownHostException;import android.app.Activity;import android.os.Bundle;import android.os.Handler;import android.util.Log;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.EditText;import android.widget.TextView;public class MainActivity extends Activity {private TextView display;private Handler handler;private String host;private Button btn;private Socket socket;private String line;private EditText et;@Overrideprotected void onCreate(Bundle savedInstanceState) {// TODO Auto-generated method stubsuper.onCreate(savedInstanceState);setContentView(R.layout.activity_main);handler = new Handler();btn = (Button) findViewById(R.id.send);et = (EditText)findViewById(R.id.editText1);et.setText("192.168.1.100");OnClickListener listener = new OnClickListener() {@Overridepublic void onClick(View v) {// TODO Auto-generated method stubnew Thread() {public void run() {try {host = et.getText().toString();socket = new Socket(host, 30000);// 设置10秒之后即觉得是超时socket.setSoTimeout(10000);BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));line = br.readLine();Log.d("Read:", line);br.close();socket.close();} catch (UnknownHostException e) {// TODO Auto-generated catch blockLog.e("UnknownHost", "没找到主机");e.printStackTrace();} catch (IOException e) {Log.e("IOException", "输入输出出现错误");// TODO Auto-generated catch blocke.printStackTrace();}handler.post(new Runnable(){@Overridepublic void run() {// TODO Auto-generated method stubdisplay = (TextView) findViewById(R.id.display);display.setText(line);}});}}.start();}};btn.setOnClickListener(listener);}}
这里需要注意的是,与网络相关的更新UI界面的一定不以在主线程中进行更,必需要用到Handler实现UI更新 好了。看一下布局文件
 
最后。不得不提的是,由于用到了网络,所以在AndroidMainFest.xml中千万不要忘记加上下面权限

转载于:https://www.cnblogs.com/liguangsunls/p/7098463.html

你可能感兴趣的文章
CSU 1325 莫比乌斯反演
查看>>
网络编程
查看>>
北京集训:20180318
查看>>
学习springboot框架
查看>>
DB2 SQL 错误(SQLCODE:-964,SQLSTATE:57011)处理方法
查看>>
火狐豆绿色
查看>>
Struts2中的类型转换
查看>>
try,catch,finally
查看>>
CURD定义
查看>>
react-router @4用法整理
查看>>
贴海报 (线段树染色-离散化
查看>>
ext.net 实现gridpanel checkbox锁定
查看>>
Visual Stdio C++ 编译器、链接器常用命令
查看>>
log4j 总结 精华
查看>>
B/S 和 C/S 架构软件
查看>>
sprintf()函数的用法
查看>>
五个简单例子,明白闭包原理
查看>>
利用npm 安装删除模块
查看>>
单表查询的增删改查
查看>>
Ubuntu 16.04 总出现红色圆圈警告和检测到系统程序出现问题
查看>>