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

CloudCone2核KVM美国洛杉矶MC机房机房2.89美元/月,美国洛杉矶MC机房KVM虚拟架构2核1.5G内存1Gbps带宽,国外便宜美国VPS七月特价优惠

近日CloudCone发布了七月的特价便宜优惠VPS云服务器产品,KVM虚拟架构,性价比最高的为2核心1.5G内存1Gbps带宽5TB月流量,2.89美元/月,稳定性还是非常不错的,有需要国外便宜VPS云服务器的朋友可以关注一下。CloudCone怎么样?CloudCone服务器好不好?CloudCone值不值得购买?CloudCone是一家成立于2017年的美国服务器提供商,国外实力大厂,自己开...

VirtVPS抗投诉瑞士VPS上线10美元/月

专心做抗投诉服务器的VirtVPS上线瑞士机房,看中的就是瑞士对隐私的保护,有需要欧洲抗投诉VPS的朋友不要错过了。VirtVPS这次上新的瑞士服务器采用E-2276G处理器,Windows/Linux操作系统可选。VirtVPS成立于2018年,主营荷兰、芬兰、德国、英国机房的离岸虚拟主机托管、VPS、独立服务器、游戏服务器和外汇服务器业务。VirtVPS 提供世界上最全面的安全、完全受保护和私...

快快云:香港沙田CN2/美国Cera大宽带/日本CN2,三网直连CN2 GIA云服务器和独立服务器

快快云怎么样?快快云是一家成立于2021年的主机服务商,致力于为用户提供高性价比稳定快速的主机托管服务,快快云目前提供有香港云服务器、美国云服务器、日本云服务器、香港独立服务器、美国独立服务器,日本独立服务器。快快云专注为个人开发者用户,中小型,大型企业用户提供一站式核心网络云端服务部署,促使用户云端部署化简为零,轻松快捷运用云计算!多年云计算领域服务经验,遍布亚太地区的海量节点为业务推进提供强大...

handlersocket为你推荐
旺旺群发阿里旺旺如何群发信息?mergefield邮件合并日期,想让电子表格中的日期格式与WORD中的日期格式一致youtube创始人世界第一大网站是什么?ico监管ICO为什么被叫停公众号付费阅读如何申请微信付费阅读功能qq管家官网在qq电脑管家官网有个可以登录qq的。登录上了可以加速么?sms是什么短信确认码是什么flash序列号求flash的序列号微盟价格微盟怎么收费?btest请教SpringSide到底是做什么用的
看国外视频直播vps 域名服务dns的主要功能为 代理域名备案 kvmla raksmart hawkhost 免备案空间 ssh帐号 坐公交投2700元 百兆独享 股票老左 智能dns解析 东莞服务器托管 photobucket lamp什么意思 空间服务器 免备案cdn加速 杭州电信宽带 hdchina 贵州电信 更多