handlersocketsocket实现过程,具体用的方法;怎么实现异步socket

handlersocket  时间:2021-06-21  阅读:()

android做客户端socket如何让点击按钮向服务器发送信息

使用基于TCP协议的Socket 一个客户端要发起一次通信,首先必须知道运行服务器端的主机IP地址。

然后由网络基础设施利用目标地址,将客户端发送的信息传递到正确的主机上,在Java中,地址可以由一个字符串来定义,这个字符串可以使数字型的地址(比如192.168.1.1),也可以是主机名()。

而在android 4.0 之后系统以后就禁止在主线程中进行网络访问了,原因是: 主线程是负责UI的响应,如果在主线程进行网络访问,超过5秒的话就会引发强制关闭,所以这种耗时的操作不能放在主线程里。

放在子线程里,而子线程里是不能对主线程的UI进行改变的,因此就引出了Handler,主线程里定义Handler,子线程里使用。

以下是一个android socket客户端的例子: ---------------------------------Java代码--------------------------------------- import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintStream; import java.io.UnsupportedEncodingException; import SocketAddress; import .Socket; import .UnknownHostException; import android.app.Activity; import android.content.Context; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.Toast; public class TCPSocketActivity extends Activity { public static final String TAG = TCPSocketActivity.class.getSimpleName(); /* 服务器地址 */ private String host_ip = null; /* 服务器端口 */ private int host_port = 0; private Button btnConnect; private Button btnSend; private EditText editSend; private EditText hostIP; private EditText hostPort; private Socket socket; private PrintStream output; private String buffer = ""; private Context context; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_socket_test); context = this; initView(); btnConnect.setOnClickListener(new Button.OnClickListener() { @Override public void onClick(View v) { host_ip = hostIP.getText().toString(); host_port = Integer.parseInt(hostPort.getText().toString()); new Thread(new ConnectThread()).start(); } }); btnSend.setOnClickListener(new Button.OnClickListener() { @Override public void onClick(View v) { new Thread(new SendThread(editSend.getText().toString())).start(); } }); } private void toastText(String message) { Toast.makeText(context, message, Toast.LENGTH_LONG).show(); } public void handleException(Exception e, String prefix) { e.printStackTrace(); toastText(prefix + e.toString()); } public void initView() { btnConnect = (Button) findViewById(R.id.btnConnect); btnSend = (Button) findViewById(R.id.btnSend); editSend = (EditText) findViewById(R.id.sendMsg); hostIP = (EditText) findViewById(R.id.hostIP); hostPort = (EditText) findViewById(R.id.hostPort); } private void closeSocket() { try { output.close(); socket.close(); } catch (IOException e) { handleException(e, "close exception: "); } } Handler handler = new Handler() { @Override public void handleMessage(Message msg) { super.handleMessage(msg); if (0x123 == msg.what) { toastText("连接成功!"); } } }; /* 连接socket线程 */ public class ConnectThread implements Runnable { @Override public void run() { // TODO Auto-generated method stub Message msg = Message.obtain(); try { if (null == socket || socket.isClosed()) { socket = new Socket(); socket.connect(new SocketAddress(host_ip,host_port),5000); output = new PrintStream(socket.getOutputStream(), true, "utf-8"); } msg.what = 0x123; handler.sendMessage(msg); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } } /*发送信息线程*/ public class SendThread implements Runnable { String msg; public SendThread(String msg) { super(); this.msg = msg; } @Override public void run() { // TODO Auto-generated method stub try { output.print(msg); } catch (Exception e) { e.printStackTrace(); } closeSocket(); } } public class SocketThread implements Runnable { public String txt1; public SocketThread(String txt1) { super(); this.txt1 = txt1; } @Override public void run() { // TODO Auto-generated method stub Message msg = Message.obtain(); try { /* 连接服务器 并设置连接超时为5秒 */ if (socket.isClosed() || null == socket) { socket = new Socket(); socket.connect(new SocketAddress(host_ip,host_port),5000); } // 获取输入输出流 PrintStream ou = new PrintStream(socket.getOutputStream(), true, "UTF-8"); BufferedReader bff = new BufferedReader(new InputStreamReader( socket.getInputStream())); // 读取发来服务器信息 String line = null; buffer = ""; while ((line = bff.readLine()) != null) { buffer = line + buffer; } // 向服务器发送信息 ou.print(txt1); ou.flush(); // 关闭各种输入输出流 bff.close(); ou.close(); socket.close(); msg.what = 0x123; handler.sendMessage(msg); } catch (UnknownHostException e) { } catch (IOException e) { } } } } -----------------------------布局文件activity_socket_test.xml-------------------------------------- <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:background="@color/white" android:orientation="vertical" > <EditText android:id="@+id/hostIP" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_margin="5dip" android:hint="服务器ip" android:singleLine="true" android:inputType="text" /> <EditText android:id="@+id/hostPort" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_margin="5dip" android:hint="端口" android:singleLine="true" android:inputType="number" /> <Button android:id="@+id/btnConnect" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_gravity="center_vertical|center_horizontal" android:background="@drawable/style_btn_shape" android:layout_margin="5dip" android:text="@string/connect" android:textColor="@color/white" /> <EditText android:id="@+id/sendMsg" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_margin="5dip" android:hint="需要发送的内容" android:inputType="text" /> <Button android:id="@+id/btnSend" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_margin="5dip" android:background="@drawable/style_btn_shape" android:layout_gravity="center_vertical|center_horizontal" android:text="@string/send" android:textColor="@color/white" /> </LinearLayout> -------------------------样式文件style_btn_shape.xml---------------------------------- <?xml version="1.0" encoding="UTF-8"?> <shape xmlns:android="/apk/res/android" android:shape="rectangle"> <!-- 填充的颜色 --> <solid android:color="#0465b2" /> <!-- 设置按钮的四个角为弧形 --> <!-- android:radius 弧形的半径 --> <corners android:radius="15dip" /> <!-- padding:Button里面的文字与Button边界的间隔 --> <padding android:left="10dp" ="10dp" android:right="10dp" android:bottom="10dp" /> </shape> ------------------------------END---------------------------------------

什么叫套接字。Socket?

套接字,简单的说就是通信的两方的一种约定,用套接字中的相关函数来完成通信过程 应用层通过传输层进行数据通信时,TCP和UDP会遇到同时为多个应用程序进程提供并发服务的问题。

多个TCP连接或多个应用程序进程可能需要通过同一个 TCP协议端口传输数据。

为了区别不同的应用程序进程和连接,许多计算机操作系统为应用程序与TCP/IP协议交互提供了称为套接字(Socket)的接口

socket实现过程,具体用的方法;怎么实现异步socket

java编程对于Socket之间的通信过程如下: 服务端往Socket的输出流里面写东西,客户端就可以通过Socket的输入流读取对应的内容。

Socket与Socket之间是双向连通的,所以客户端也可以往对应的Socket输出流里面写东西,然后服务端对应的Socket的输入...

Hostodo:4款便宜美国vps七折优惠低至$13/年;NVMe阵列1Gbps带宽,免费DirectAdmin授权

hostodo怎么样?快到了7月4日美国独立日,hostodo现在推出了VPS大促销活动,提供4款Hostodo美国独立日活动便宜VPS,相当于7折,低至$13/年,续费同价。Hostodo美国独立日活动结束时间不定,活动机售完即止。Hostodo商家支持加密数字货币、信用卡、PayPal、支付宝、银联等付款。Hostodo美国独立日活动VPS基于KVM虚拟,NVMe阵列,1Gbps带宽,自带一个...

cyun29元/月,香港CN2 GIA云服务器低至起;香港多ip站群云服务器4核4G

cyun怎么样?cyun蓝米数据是一家(香港)藍米數據有限公司旗下品牌,蓝米云、蓝米主机等同属于该公司品牌。CYUN全系列云产品采用KVM架构,SSD磁盘阵列,优化线路,低延迟,高稳定。目前,cyun推出的香港云服务器性价比超高,香港cn2 gia云服务器,1核1G1M/系统盘+20G数据盘,低至29元/月起;香港多ip站群云服务器,16个ip/4核4G仅220元/月起,希望买香港站群服务器的站长...

2022年最新PHP短网址生成系统/短链接生成系统/URL缩短器系统源码

全新PHP短网址系统URL缩短器平台,它使您可以轻松地缩短链接,根据受众群体的位置或平台来定位受众,并为缩短的链接提供分析见解。系统使用了Laravel框架编写,前后台双语言使用,可以设置多域名,还可以开设套餐等诸多功能,值得使用。链接: https://pan.baidu.com/s/1ti6XqJ22tp1ULTJw7kYHog?pwd=sarg 提取码: sarg文件解压密码 www.wn7...

handlersocket为你推荐
阶乘符号1~10的阶乘(!)分别是多少?excel大写金额在Excel中如何输入数字直接显示大写金额?手机软件开发工具怎样开发手机软件comexception电脑出现ConnectException: 是什么原因?动画分镜头脚本动漫脚本和分镜头的区别?懂的进彩信平台请问彩信平台升级怎么改参数能告诉我具体步骤吗?微盟价格虚拟币的价格由什么决定aviconverter跪求AVIConverter V1.0下载地址btestBTEST软件测试工程师培训女孩适合学吗?就业前景如何呢?flushes翻譯下面的日記
泛域名绑定 win8升级win10正式版 ev证书 牛人与腾讯客服对话 52测评网 什么是刀片服务器 七夕促销 中国电信测网速 香港亚马逊 丽萨 免费asp空间申请 购买空间 江苏双线 七十九刀 美国达拉斯 回程 招聘瓦工 天鹰抗ddos防火墙 次世代主机 远程主机强迫关闭了一个现有的连接 更多