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的输入...

SunthyCloud阿里云国际版分销商注册教程,即可PayPal信用卡分销商服务器

阿里云国际版注册认证教程-免绑卡-免实名买服务器安全、便宜、可靠、良心,支持人民币充值,提供代理折扣简介SunthyCloud成立于2015年,是阿里云国际版正规战略级渠道商,也是阿里云国际版最大的分销商,专业为全球企业客户提供阿里云国际版开户注册、认证、充值等服务,通过SunthyCloud开通阿里云国际版只需要一个邮箱,不需要PayPal信用卡就可以帮你开通、充值、新购、续费阿里云国际版,服务...

香港云服务器 1核 256M 19.9元/月 Mineserver Ltd

Mineserver(ASN142586|UK CompanyNumber 1351696),已经成立一年半。主营香港日本机房的VPS、物理服务器业务。Telegram群组: @mineserver1 | Discord群组: https://discord.gg/MTB8ww9GEA7折循环优惠:JP30(JPCN2宣布产品可以使用)8折循环优惠:CMI20(仅1024M以上套餐可以使用)9折循...

webhosting24:€28/年,日本NVMe3900X+Webvps

webhosting24决定从7月1日开始对日本机房的VPS进行NVMe和流量大升级,几乎是翻倍了硬盘和流量,当然前提是价格依旧不变。目前来看,国内过去走的是NTT直连,服务器托管机房应该是CDN77*(也就是datapacket.com),加上高性能平台(AMD Ryzen 9 3900X+NVMe),这样的日本VPS还是有相当大的性价比的。官方网站:https://www.webhosting...

handlersocket为你推荐
存储区域网络什么是存储局域网?组建它需要哪些内容?4k超高清视频下载哪里有4K片源下载啊?补充:刚入手了一个4k电视盒,小美盒子V9,说是支持4k。正好我的电视机是4k的,想知道哪里有得下载呢?有朋友说我傻,现在基本上没有4k片源下载,而且不知道什么时候才有。等到流行的时候也许这个机器又淘汰啦!我该怎么办啊?createfile失败CreateFile失败,代码5拒绝访问(高分在线求助!!!)最好的翻译网站求最好的翻译网站和软件素数算法有能写出所有素数的公式吗excel大写金额在EXCEL表格里怎样自动生成金额大写手机软件开发工具做安卓软件开发需要哪些工具?averagesPoisson-Arrivals-See-Time-Averages是什么意思全局钩子delphi 键盘全局钩子方正证券官方网方正证券同花顺下载/2010同花顺官方网站/同花顺官方网站首页
域名注册信息查询 域名空间购买 sharktech burstnet 2014年感恩节 mobaxterm 主机屋免费空间 河南服务器 微信收钱 北京双线机房 爱奇艺vip免费试用7天 服务器合租 四川电信商城 双线asp空间 视频服务器是什么 全能空间 atom处理器 云销售系统 广东服务器托管 小夜博客 更多