使用Socket进行通信
来源:互联网 发布:淘宝服装质检 编辑:程序博客网 时间:2024/04/30 19:06
当两台计算机通过TCP/IP协议进行通信时,通常使用Socket对象来代表两端的通信接口,并通过Socket产生I/O流来进行网络通信。
其中ServerSocket对象能接收其他通信实体连接的请求,该对象用于监听来自客户端的Socket连接,如果没有连接,它将一直处于等待状态。
在本文中将创建一个服务器端的ServerSocket 和 手机客户端的Socket . 使它们建立连接,产生I/O流,在手机上显示获取的数据。
最终得到的结果如下图所示。
首先建一个Java项目,用来创建ServerSocket. 代码如下
import java.io.IOException;import java.io.OutputStream;import java.net.ServerSocket;import java.net.Socket;public class SimpleServer {public static void main(String[] args) throws IOException {//创建一个ServerSocket,用于监听客户端Socket的连接请求ServerSocket ss = new ServerSocket(30000);System.out.println("服务器端已准备接受请求");//使用循环不断接收来自客户端的请求while(true){//每当接收到一个客户端Socket的请求,服务器端也会对应产生一个Socket对象Socket s = ss.accept();OutputStream os = s.getOutputStream();//输出字符串,并强行使用UTF-8字符集进行编码os.write("您好,您收到了服务器的新年祝福!\n".getBytes("utf-8"));//关闭输出流,关闭Socketos.close();s.close();}}}
然后建立一个Android项目,activity_main.xml 代码 如下
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="${packageName}.${activityClass}" > <EditText android:id="@+id/show" android:layout_width="match_parent" android:layout_height="wrap_content" /></RelativeLayout>
package com.wyb.simpleclient;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.widget.EditText;public class MainActivity extends Activity {private EditText show;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);show = (EditText)findViewById(R.id.show);///创建一个新线程来进行网络操作new Thread(){@Overridepublic void run() {try {//建立连接到远程服务器的Socket Socket socket = new Socket("192.168.0.104",30000);//将Socket对应的输入流包装成BufferedReaderBufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));//进行普通的I/O操作String line = br.readLine();//在该线程中控制UI中的EditText控件显示内容show.setText("来自服务器的数据: "+ line);//关闭流、socketbr.close();socket.close();} catch (UnknownHostException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}}}.start();}}
代码当中192.168.0.104 为本机的IP地址 查询本机IP地址可以通过在开始中输入 cmd 进入控制台界面,然后输入 IPconfig 按回车 即可得到相关信息。
由于在本项目当中使用到了网络通信,因此一定要再AndroidManifest.xml当中配置访问互联网的权限。
<uses-permission android:name="android.permission.INTERNET"/>
从Android2.3以后的版本中,Android平台不允许直接在UI线程建立网络连接,访问网络资源。因此需要把与网络相关的操作放在新线程中。如本项目中就使用了
new Thread() 来创建新线程。 在新线程中操控UI中的 EditText 控件显示得到的内容。但一般情况下,UI 中的控件其他线程是不能操作的。除ProgressBar 和EditText 以外(目前我所知道)
0 0
- 使用Socket进行通信
- 使用Socket进行通信
- 使用Bash进行Socket通信
- 使用Python进行socket通信
- Android使用Socket进行通信
- java 使用Socket进行通信
- Python使用Socket 进行进程间通信
- Android 使用Socket进行网络通信
- Android---50---使用Socket进行通信
- 安卓 使用socket进行通信
- PHP中如何使用socket进行通信?
- C#使用ProtoBuf进行Socket通信
- IOCP进行SOCKET通信
- 一步一步教你使用.net进行Socket通信
- 一步一步教你使用.net进行Socket通信
- 一步一步教你使用.net进行Socket通信
- 一步一步教你使用.net进行Socket通信
- 逐步教你使用.net进行Socket通信进阶篇
- 关于图形的几个问题
- 详解 Too many open files
- YUV / RGB 格式及快速转换算法
- const 的作用
- HDU1103 Flo's Restaurant 【模拟】
- 使用Socket进行通信
- 设置navigationbar title颜色
- 编译busybox1.22.1产生错误解决方案
- 黑白之道
- 系统架构学习日志1——内存管理、虚拟存储地址的概念
- Java错误代码篇记录(一)--空指针异常
- 想提升工作效率,就別再做这七件事
- Android Activity原理以及其子类描述
- MAT-中国剩余定理