Android Socket服务器实现指南 (android socket 服务器)

Android Socket 服务器实现指南

随着移动互联网的深入发展,Android在移动系统中的地位无可替代。而Socket是进行网络通信的主流方法,Android移动应用中也难以绕过它。本文提供,主要针对入门级别的开发人员,帮助他们搭建基于Socket通信的服务器。

一、Socket服务器概述

Socket是一种通常用于网络通信的API,它采用标准的TCP/IP协议族,使得客户端与服务器端之间建立起良好和稳定的通信连接。Socket服务器则是建立在Socket的基础之上的一种服务器,它通过服务端创建的Socket对象与客户端进行通信,可以实现客户端与服务器之间的信息交换,从而实现端对端的数据传输。

二、Android Socket服务器实现流程

1. 创建ServerSocket对象;

2. 调用ServerSocket的accept()方法,等待客户端连接;

3. 收到客户端的连接请求后,创建与客户端通信的Socket对象;

4. 利用Socket对象收发数据,实现客户端与服务器之间的通信;

5. 关闭ServerSocket和Socket对象。

三、具体实现

1. 创建ServerSocket对象

“`

ServerSocket serverSocket = new ServerSocket(port);

“`

其中port是服务器监听的端口号,创建ServerSocket对象时,需要指定一个在可用范围内的端口。

2. 服务器等待客户端连接

“`

Socket socket = serverSocket.accept();

“`

服务器调用ServerSocket的accept()方法,等待客户端的连接请求,如果有客户端连接进来,则返回一个对应的Socket对象。

3. 与客户端进行通信

在与客户端进行通信之前,需要先获取Socket对象的输入输出流:

“`

InputStream inputStream = socket.getInputStream();

OutputStream outputStream = socket.getOutputStream();

“`

通过输入输出流,可以进行收发数据,比如:

“`

BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));

String message = reader.readLine();

“`

其中,BufferedReader是Java 的字符流插件,将字节流转换为字符流,更加容易处理。InputStreamReader是字节流通向字符流的桥梁。readLine()方法则是读取客户端传输过来的数据。

4. 关闭ServerSocket和Socket对象

服务器通信完成后,需要及时关闭所有的网络连接对象:

“`

outputStream.close();

inputStream.close();

socket.close();

serverSocket.close();

“`

五、实例

“`

public class SocketServer {

public static void mn(String[] args) {

try {

int port = 1234;//服务监听端口

String host = InetAddress.getLocalHost().getHostAddress();//本机IP地址

ServerSocket serverSocket = new ServerSocket(port);

System.out.println(“服务启动,等待客户端连接…”);

System.out.println(“本机IP地址为:” + host + “,监听端口号为:” + port);

Socket socket = serverSocket.accept();

System.out.println(“客户端已连接,IP地址为:” + socket.getInetAddress().getHostAddress());

BufferedReader reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));

String message = reader.readLine();

System.out.println(“收到客户端消息: ” + message);

OutputStream outputStream = socket.getOutputStream();

PrintWriter writer = new PrintWriter(outputStream);

writer.println(“收到消息: ” + message);

writer.flush();

reader.close();

writer.close();

outputStream.close();

socket.close();

serverSocket.close();

} catch (IOException e) {

e.printStackTrace();

}

}

}

“`

在客户端使用Java编写一个Socket客户端,用于向服务器发送消息:

“`

public class SocketClient {

public static void mn(String[] args) {

try {

int port = 1234;//服务器端口号

String host = “127.0.0.1”;//连接的服务器IP地址

Socket clientSocket = new Socket(host, port);

String message = “Hello, Socket!”;//待发送消息

OutputStream outputStream= clientSocket.getOutputStream();

PrintWriter writer = new PrintWriter(outputStream);

writer.println(message);

writer.flush();

BufferedReader reader = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));

String replyMessage = reader.readLine();

System.out.println(“客户端收到服务端回复: ” + replyMessage);

writer.close();

outputStream.close();

reader.close();

clientSocket.close();

} catch (IOException e) {

e.printStackTrace();

}

}

}

“`

在命令行窗口运行SocketServer程序,在另一个命令行窗口中运行SocketClient程序,可以看到客户端向服务器传输数据,并收到服务器回传的消息。这说明,建立起的两个Socket对象之间实现了通信。

六、

本文提供了一份 ,介绍了Android移动端如何通过Socket API建立服务器,实现与客户端的通信。通过对实例的演示,读者可以更好地理解Socket服务器的建立过程和相应步骤,作为入门开发人员,可以更加快速地上手Socket编程。但是,在现实开发中,Socket编程涉及到的知识点比较繁杂,需要不断地学习积累。

相关问题拓展阅读:

手机作为客户端,电脑作为服务器进行android socket通信

模拟器 和 手机的 ip是不一样的,这个有没有错

1.PC服务器启用ServerSocket两个通信实体在建立虚拟链路之前,需要有一方先准备好,主动接受来自其他通信实体的连接请求。使用ServerSocket对象行配衫监听来自客户端的Socket连接。//创建ServerSocket对象ServerSocketss=newServerSocket(30000);//监听来自客户端的请求while(true){Sockets=ss.accept();…}如果没有连接,则将一直处于等待状态。当接收到连接请求后,获取消息到输入流,并保存到文件。//接收客户端消息BufferedReaderin=newBufferedReader(newInputStreamReader(client.getInputStream()));Stringstr;BufferedWriterbw=newBufferedWriter(newFileWriter(“D:/ApInfo”+(i++)+”卖闹.txt”));while((str=in.readLine())!=null){System.out.println(str);bw.write(str);bw.newLine();}2.Android终端使用Socket通信客户端使用Socket的构造器连接服务器,指定服务器IP和端口号就可以了。Sockets=newSocket(“192.168.1.100”,30000);这样服务器端的accept()方法就得到响应,从而向下执行,服务器端和客户端就形成了一对互相连接的Socket。再进行通信时就没有服务器和客户端之分了,都是通过输入输出流进行通信。详细步骤:采用Handler和TimerTask来定时扫描AP信息并发送给服务器端。TimerTask规定了到达指定的时间所要进行档腔的任务。TimerTasktask=newTimerTask(){publicvoidrun(){Messagemessage=newMessage();message.what=1;handler.sendMessage(message);}};handler传递message内容:Handlerhandler=newHandler(){publicvoidhandleMessage(Messagemsg){switch(msg.what){case1://执行定时器时间到了之后由handler传递的任务break;}super.handleMessage(msg);}}接下来扫描AP信息并发送给服务器端,然后将结果保存。WifiManagerwifiManager=(WifiManager)getSystemService(WIFI_SERVICE);wifiManager.startScan();mWifiList=wifiManager.getScanResults();由WifiManager说明可知,它可以用于处理已配置的网络,当前连接的网络及AP信息的扫描等情况。向服务器发送消息:socket=newSocket(“192.168.1.211”,30000);//向服务器端发送消息PrintWriterout=newPrintWriter(newBufferedWriter(newOutputStreamWriter(socket.getOutputStream())),true);out.println(message);其中message为获取的AP信息,测试收到的信息格式为:SSID:ICIS_LAB,BSSID:1c:af:f7:9a:65:e4,capabilities:,level:-80,frequency:2437

你使用的是模拟器还是手机?(模拟器是10.0.2.2)

我系统linux

关于android socket 服务器的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。


数据运维技术 » Android Socket服务器实现指南 (android socket 服务器)