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

美国高防云服务器 1核 1G 10M 38元/月 百纵科技

百纵科技:美国云服务器活动重磅来袭,洛杉矶C3机房 带金盾高防,会员后台可自助管理防火墙,添加黑白名单 CC策略开启低中高.CPU全系列E52680v3 DDR4内存 三星固态盘列阵。另有高防清洗!百纵科技官网:https://www.baizon.cn/联系QQ:3005827206美国洛杉矶 CN2 云服务器CPU内存带宽数据盘防御价格活动活动地址1核1G10M10G10G38/月续费同价点击...

提速啦香港独立物理服务器E3 16G 20M 5IP 299元

提速啦(www.tisula.com)是赣州王成璟网络科技有限公司旗下云服务器品牌,目前拥有在籍员工40人左右,社保在籍员工30人+,是正规的国内拥有IDC ICP ISP CDN 云牌照资质商家,2018-2021年连续4年获得CTG机房顶级金牌代理商荣誉 2021年赣州市于都县创业大赛三等奖,2020年于都电子商务示范企业,2021年于都县电子商务融合推广大使。资源优势介绍:Ceranetwo...

georgedatacenter:美国VPS可选洛杉矶/芝加哥/纽约/达拉斯机房,$20/年;洛杉矶独立服务器39美元/月

georgedatacenter怎么样?georgedatacenter这次其实是两个促销,一是促销一款特价洛杉矶E3-1220 V5独服,性价比其实最高;另外还促销三款特价vps,大家可以根据自己的需要入手。georgedatacenter是一家成立于2019年的美国vps商家,主营美国洛杉矶、芝加哥、达拉斯、新泽西、西雅图机房的VPS、邮件服务器和托管独立服务器业务。georgedatacen...

handlersocket为你推荐
ata考试有人能仔细讲一下ATA考试是什么吗?离线包地图包包是什么牌子instagram电脑版iOS 有哪些优秀的照片处理软件爱短信官网官方飞信,ET飞信,爱短信飞信插件哪个好用??ico监管在中国ICO为什么不合法excel大写金额在Excel中如何输入数字直接显示大写金额?国家法规数据库食品及食用农产品标准法规信息支撑和综合应用平台/食品安全标准与技术法规动态比对数据库如何查询标准pat是什么格式photoshop填充图案是pat格式,需用什么软件打开?请高人指点,谢谢~webservice框架如何用webservice 的cxf框架云输入法QQ云输入法怎样进行中英文切换?
asp虚拟空间 深圳域名空间 合租服务器 vps教程 息壤备案 美国主机评论 安云加速器 优key gateone 主机屋免费空间 贵州电信宽带测速 ssh帐号 lol台服官网 南通服务器 新睿云 空间登录首页 www789 云营销系统 深圳主机托管 免备案jsp空间 更多