使用Socket沟通
当两台电脑TCP/IP协议进行通讯。平时Socket对象来表示该通信接口的两端,并通过Socket生产I/O流进行网络通信。
其中ServerSocket对象可以接收从连接的其他通信实体的请求。这个目的是用于侦听client的Socket连接。假设没有连接,它将一直处于等待状态。
在本文中将创建一个server端的ServerSocket 和 手机client的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,用于监听clientSocket的连接请求
ServerSocket ss = new ServerSocket(30000);
System.out.println("server端已准备接受请求");
//使用循环不断接收来自client的请求
while(true){
//每当接收到一个clientSocket的请求。server端也会相应产生一个Socket对象
Socket s = ss.accept();
OutputStream os = s.getOutputStream();
//输出字符串。并强行使用UTF-8字符集进行编码
os.write("您好。您收到了server的新年祝福! \n".getBytes("utf-8"));
//关闭输出流,关闭Socket
os.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>
MainActivity.java 代码 例如以下
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;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); show = (EditText)findViewById(R.id.show);
///创建一个新线程来进行网络操作
new Thread(){ @Override
public void run() { try {
//建立连接到远程server的Socket
Socket socket = new Socket("192.168.0.104",30000);
//将Socket相应的输入流包装成BufferedReader
BufferedReader br = new BufferedReader(
new InputStreamReader(socket.getInputStream()));
//进行普通的I/O操作
String line = br.readLine();
//在该线程中控制UI中的EditText控件显示内容
show.setText("来自server的数据: "+ line);
//关闭流、socket
br.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 外(现在我知道)
使用Socket沟通的更多相关文章
- nginx反向代理docker容器化django
1.新建Dockerfile FROM python:3.8.5 MAINTAINER ChsterChen ENV PYTHONUNBUFFERED 1 COPY pip.conf /root/.p ...
- 从零开始学Python第八周:网络编程基础(socket)
Socket网络编程 一,Socket编程 (1)Socket方法介绍 Socket是网络编程的一个抽象概念.通常我们用一个Socket表示"打开了一个网络链接",而打开一个Soc ...
- Java Socket编程
Java最初是作为网络编程语言出现的,其对网络提供了高度的支持,使得客户端和服务器的沟通变成了现实,而在网络编程中,使用最多的就是Socket.像大家熟悉的QQ.MSN都使用了Socket相关的技术. ...
- IOS Socket 01-网络协议基础知识
1. 网络参考模型 OSI参考模型 TCP/IP参考模型 2. 七层简述 1)物理层:主要定义物理设备标准,如网线的接 ...
- Socket开发框架之框架设计及分析
虽然在APP应用.Web应用.Winform应用等大趋势下,越来越多的企业趋向于这些应用系统开发,但是Socket的应用在某些场合是很必要的,如一些停车场终端设备的接入,农业或者水利.压力监测方面的设 ...
- Linux IPC tcp/ip socket 编程
模型 #include <unistd.h> #include <sys/types.h> #include <sys/socket.h> #include < ...
- Java Socket编程题库
一. 填空题 ___ IP地址____用来标志网络中的一个通信实体的地址.通信实体可以是计算机,路由器等. 统一资源定位符URL是指向互联网"资源"的指针,由4部分组成:协议 ...
- 在线白板,基于socket.io的多人在线协作工具
首发:个人博客,更新&纠错&回复 是昨天这篇博文留的尾巴,socket.io库的使用练习,成品地址在这里. 代码已经上传到github,传送门.可以开俩浏览器看效果. 现实意义是俩人在 ...
- Java Socket编程----通信是这样炼成的
Java最初是作为网络编程语言出现的,其对网络提供了高度的支持,使得客户端和服务器的沟通变成了现实,而在网络编程中,使用最多的就是Socket.像大家熟悉的QQ.MSN都使用了Socket相关的技术. ...
随机推荐
- dialog开发
dialog开发屏幕编程:ok_code在程序里用sy-ucomm接受 调用其他事物代码:call transaction ‘SE38’. 1:50 选择屏幕之屏幕按钮: selection-scre ...
- Mysql 和Oracle rows 区别
mysql> explain select t1.* from t2 ,t1 where t2.id=t1.id and t2.id<3;\ +----+-------------+--- ...
- 【虚拟化实战】容灾设计之三Stretched Cluster
作者:范军 (Frank Fan) 新浪微博:@frankfan7 Stretched Cluster是一把双刃剑,会用的如行云流水,用不好反而受其限制. 传统的vSphere Cluster是指一个 ...
- Zeroonepack coming~^.^
今天抓的四道DP做完了==三道是用背包做的,突然想起来背包知识点总结还没做~反正时间还早..把01背包和完全背包小结了吧~~福利来啦~~噶呜~ 01背包: 基本思路: 01背包问题是最广为人知的动态规 ...
- If-Modified-Since页面是否更新
第一次先请求某个网页,抓取到本地,假设文件名为 a.html.这时文件系统有个文件的修改时间. 第二次访问网页,如果发现本地已经有了 a.html,则向服务器发送一个 If-Modified-Sinc ...
- spring开发基础
Spring是一个开源框架,它由Rod Johnson创建.它是为了解决企业应用开发的复杂性而创建的.Spring使用基本的JavaBean来完成以前只可能由EJB完成的事情.然而,Spring的用途 ...
- VC6迁移到VS2008几个问题——良好的代码,从我做起,从现在开始。
最近.有一个项目开发,需要使用一次项目的代码.只有当项目VC6下编译通过的,在VS2008下不一定编译通过,能编译通过也不一定能链接成功.以下总结一下我在一个VC6项目移植到VS2008中遇到的一些问 ...
- JavaFX游戏开发效率浅谈
声明: 本博客文章原创类别的均为个人原创,版权所有.转载请注明出处: http://blog.csdn.net/ml3947,另外本人的个人博客:http://www.wjfxgame.com. ...
- 开源工具DbUtils的使用(数据库的增删改查)
开源工具DbUtils的使用(数据库的增删改查) 一.DbUtils简介: DBUtils是apache下的一个小巧的JDBC轻量级封装的工具包,其最核心的特性是结果集的封装,可以直接将查询出来的结果 ...
- 利用Perf4j 对java项目进行性能监控
Perf4j 可以对自定义监控范围的java代码进行日志记录,再经统计分析生成所需性能数据.Perf4j 提供了对常用日志工具log4j的扩展以方便与产品集成,它产生的性能数据可被用于生成可视化的性能 ...