博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Socket通信1——Android手机客户端和电脑服务器通信小例子
阅读量:6698 次
发布时间:2019-06-25

本文共 4169 字,大约阅读时间需要 13 分钟。

TCP Socket 通信 主要实现客户端和服务器的连接以及发送一条消息:

 
前提:电脑端当做服务器,Android手机作为客户端,在同一个局域网内

流程:

1.电脑端服务器打开,监听端口号:9998

2.当手机连上服务器,发送 "您好,服务器!"的消息,服务器通过DataInputStream接收之后,打印出来

3.服务器接收并打印消息之后,随机发送“您好,客户端!”的消息给手机客户端

手机刚打开客户端的界面:

刚打开客户端

手机点击"连接服务器"之后,服务器收到消息:

手机点击"连接服务器"之后,服务器收到消息

服务器返回给客户端的消息:

服务器返回给客户端的消息

电脑服务器:

1 package TestSocket; 2  3 import java.io.DataInputStream; 4 import java.io.DataOutputStream; 5 import java.io.IOException; 6 import java.net.*; 7  8 import javax.net.ssl.SSLContext; 9 10 public class TcpServer {11 12     /**13      * 电脑服务器端,监听端口号9998,接收消息之后,再回复消息14      * 15      * @param args16      * @throws IOException 17      */18     public static void main(String[] args) throws IOException {19         while (true) {20             ServerSocket ss = new ServerSocket(9998);// 监听9998端口21             Socket socket = ss.accept();22             //等待客户端连上,并等待接收数据23             DataInputStream dis = new DataInputStream(socket.getInputStream());24             System.out.println(dis.readUTF()); //打印出客户端发来的数据25             //回复消息给客户端26             DataOutputStream dos = new DataOutputStream(socket.getOutputStream());27             dos.writeUTF("您好,客户端!");28             ss.close();//通信完之后要关闭,不然下次会报错29             dos.close();30             dis.close();31         }32     }33 34 }

 

Android手机客户端程序
main.xml

1 
5 6
14 15
20 21

 

MainActivity.java 文件

1 package com.example.socketclient; 2  3 import android.os.Bundle; 4 import android.os.Handler; 5 import android.os.Looper; 6 import android.os.Message; 7 import android.app.Activity; 8 import android.content.DialogInterface; 9 import android.util.Log;10 import android.view.View;11 import android.view.View.OnClickListener;12 import android.view.Menu;13 import android.widget.Button;14 import android.widget.TextView;15 import android.widget.Toast;16 17 import java.io.DataInputStream;18 import java.io.DataOutputStream;19 import java.io.IOException;20 import java.net.*;21 22 public class MainActivity extends Activity {23     TextView tv;// 用来显示服务器返回的消息 :“您好,客户端!”24     Handler mHandler;25 26     @Override27     public void onCreate(Bundle savedInstanceState) {28         super.onCreate(savedInstanceState);29         setContentView(R.layout.main);30         Button btn = (Button) findViewById(R.id.btnconnect);// 连接服务器的按钮31         btn.setOnClickListener(listener);32         tv = (TextView) findViewById(R.id.tv);33         mHandler = new MessageHandler();34     }35 36     OnClickListener listener = new OnClickListener() {37 38         @Override39         public void onClick(View v) {40             new ReceiveMessageThread().start();// 开启客户端线程41         }42     };43 44     /**45      * 异步操作,TextView显示服务器发来的消息46      * 47      * @author S.Rain48      * 49      */50     class MessageHandler extends Handler {51 52         @Override53         public void handleMessage(Message msg) {54             tv.setText(msg.obj.toString());//接收客户端线程发来的Message对象,用来显示55         }56 57     }58 59     /**60      * 客户端线程。连到服务器:192.168.1.102:9998 发送消息,之后接收服务器消息,并在TextView显示61      * 62      * @author S.Rain63      * 64      */65     class ReceiveMessageThread extends Thread {66 67         public void run() {68             try {69                 Socket socket = new Socket("192.168.1.104", 9998);70                 DataOutputStream dos = new DataOutputStream(71                         socket.getOutputStream());72                 dos.writeUTF("您好,服务器!");73 74                 DataInputStream dis = new DataInputStream(75                         socket.getInputStream());76                 Message msg = mHandler.obtainMessage();77                 msg.obj = dis.readUTF();78                 mHandler.sendMessage(msg);79                 socket.close();80                 dos.close();81                 dis.close();82             } catch (IOException e) {83                 // TODO Auto-generated catch block84                 e.printStackTrace();85             }86 87         }88     }89 90     @Override91     public boolean onCreateOptionsMenu(Menu menu) {
// 没用,工程创建时自己生成的92 getMenuInflater().inflate(R.menu.main, menu);93 return true;94 }95 }

 

转载于:https://www.cnblogs.com/Song-double-rain/p/3273378.html

你可能感兴趣的文章
关于数据库查询优化的思考
查看>>
如何在android studio中设置sdk path?
查看>>
iptables的SNAT和DNAT应用
查看>>
搭建LNMP遇到的问题
查看>>
java String类 常用函数
查看>>
Spring 容器(Spring 的上下文)
查看>>
Windows下C语言连接Oracle数据库
查看>>
Cacti 使用安装详解-企业级实例
查看>>
DNS简述
查看>>
linux ssh密钥登录配置
查看>>
Redis的七种武器及其适合的应用场景
查看>>
github和git@osc提交问题
查看>>
ASP.NET后台调用前台JS函数的三种常见方法
查看>>
easyui动态显示和隐藏表头
查看>>
平滑数据迁移,不影响服务
查看>>
Java5线程并发库之LOCK(锁)&CONDITION(条件)实现线程同步通信
查看>>
VBA语法基础
查看>>
VBA生成SQL语句
查看>>
MATLAB图像小波变换
查看>>
SQL优化准则
查看>>