Android网络编程之TCP通信----简单客户端与服务端通信
来源:互联网 发布:head设计模式不会java 编辑:程序博客网 时间:2024/06/05 18:52
由于工作的性质,Android网络编程用的很少(基本不用),再加上比较懒,也就一直没怎么看Android中网络编程。最近觉悟稍有提高,打算一步一步理清或者说是熟悉网络编程。
今天主要是对TCP通信的步骤做了解以及写一个简单的demo:简单客户端与服务端通信。
TCP通信步骤
1.服务端:
1).创建ServerSocket对象
ServerSocket()
ServerSocket(int port)
ServerSocket(int port, int backlog)
ServerSocket(int port, int backlog, InetAddress localAddress)
其中ServerSocket(int port) 最为常用。
2).读取和发送数据
在ServerSocket类中最重要的两个方法就是getInputStream和getOutputStream,分别用来获取用于读取和写入数据的InputStream和OutputStream对象。在这里InputStream读取的是客户端发送过来的消息,OutputStream是向客户端发送的数据。
3).关闭连接
对于服务端来说,需要分别调用Socket.close和ServerSocket.close方法来关闭客户端和服务端Socket。
2.客户端
1).连接服务器
两种方式:一种是通过IP的方式来连接服务器,另一种是通过域名方式来连接服务器。本质都是通过IP连接。
通过Socket类连接服务器最常用的方法就是通过Socket类的构造方法将IP或域名以及端口号作为参数传入Socket类中。
Socket socket = new Socket("172.16.30.158", 30000);
2).发送和接受数据
在Socket类中最重要的两个方法就是getInputStream和getOutputStream,分别用来获取用于读取和写入数据的InputStream和OutputStream对象。在这里InputStream读取的是服务器向客户端发送过来的消息,OutputStream是客户端像服务器端发送的数据。
BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream())); String line = br.readLine(); System.out.println("来自服务器的数据:"+line); br.close(); socket.close();
3).关闭网络连接
socket.close();
实例:
客户端是直接使用Java程序,运行在电脑上:
public class MainServer {/** * @param args */public static void main(String[] args) {// TODO Auto-generated method stubtry {ServerSocket serverSocket = new ServerSocket(30001);while(true){System.out.println("zmq Server");Socket socket = serverSocket.accept();System.out.println("zmq Server accept");OutputStream outputStream = socket.getOutputStream();outputStream.write("zhou hao yu shi sha bi ~".getBytes());outputStream.close();socket.close();}} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}
客户端是Android简单的apk,运行在手机上:
public class MainActivity extends Activity {private TextView showText; //用于显示接收到的数据@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);showText = (TextView) findViewById(R.id.showText);new Thread() {@Overridepublic void run() {// TODO Auto-generated method stubtry {System.out.println("zmq accept");Socket socket = new Socket();socket.connect(new InetSocketAddress("172.16.11.152",30001));BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(socket.getInputStream()));String line = bufferedReader.readLine();System.out.println("zmq line = "+line);Message msg = myHandler.obtainMessage();msg.what = 8;Bundle b = new Bundle();b.putString("zmq", line);msg.setData(b);myHandler.sendMessage(msg);bufferedReader.close();socket.close();} catch (UnknownHostException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}.start();}Handler myHandler = new Handler() {@Overridepublic void handleMessage(Message msg) {// TODO Auto-generated method stubsuper.handleMessage(msg);Bundle bundle = msg.getData();showText.setText(bundle.getString("zmq"));}};@Overridepublic boolean onCreateOptionsMenu(Menu menu) {// Inflate the menu; this adds items to the action bar if it is present.getMenuInflater().inflate(R.menu.main, menu);return true;}}
分别运行中两个程序,在手机的apk中可以看到,显示为:zhou hao yu shi sha bi ~
在运行的过程中也遇连接不上的问题,主要是ip在捣鬼。
之前自己也总结过关于tomcat中IP的写法,跟这个是一样的,贴出来:
1.若是在模拟器中运行,例如Genymotion,则通过ipconfig命令,得到VirtualBox主机的IP,如图所示:
使用的时候:
private String rootUrl = "http://192.168.56.1:8080/test/";
2.使用手机模拟器,需要连接网络,在同一个局域网内,则可以访问到。
webView.loadUrl("http://172.16.10.184:8080/test/zhangmq.txt");
原则是:始终在访问电脑的IP。
0 0
- Android网络编程之TCP通信----简单客户端与服务端通信
- Android网络编程之UDP通信----简单客户端与服务端通信
- linux网络编程之用socket实现简单客户端和服务端的通信(基于TCP)
- linux 网络编程之最简单的tcp通信服务端
- Socket编程基础之服务端与客户端简单通信
- linux 网络编程之最简单的tcp通信客户端
- Android网络通信----1.Socket编程之简单客户端与服务器端通信
- linux网络编程之用socket实现简单客户端和服务端的通信(基于UDP)
- Socket网络编程 客户端与服务端通信流程
- JAVA TCP通信服务端与客户端实例
- java客户端与服务端通信Tcp/Ip
- socket编程 单向服务端与客户端通信之简单协议,仅供参考
- ESP8266与Android通信简单TCP服务端设计
- Android学之客户端服务端Socket简单通信
- 简单的服务端与客户端通信代码
- 网络编程之TCP通信
- 网络通信之tcp编程
- python TCP客户端服务端通信
- C++STL 常用 函数 用法
- dos命令查看手机内置sqlite数据库--->如何刷rom包--->chmod -R 777命令查看--->adb pull 数据库
- sendemptymessage 和sendmessage的区别
- 个推 Spark实践教你绕过开发那些“坑”
- online_judge_1032
- Android网络编程之TCP通信----简单客户端与服务端通信
- java keytool 自签证书
- mongorestore 恢复mongodump文件报BSONObj size: 17794400 (0x10F8560) is invalid. Size must be between 0 and
- CentOS 配置防火墙操作 配置端口
- check the manual that corresponds to your MySQL server version for the right syntax to use near 'oiw
- python urllib2模块使用方法总结
- 关于图的一些算法
- SSH
- 《programming in scala》study note 上