51CTO下载-Java Socket编程 最简单CS程序示例
Java简单的socket编程入门实战

Java简单的socket编程⼊门实战这个是给⼥朋友写的:)⾸先需要知道我们每个电脑都可以成为server(服务器) 和 client(客户端)我们需要使⽤java来实现客户端与服务器的数据传输先帖上代码注意这⾥两张代码处于两个java project 中,因为我们实际上情况上是两台电脑来运⾏,但是由于演⽰⽅便这⾥就本机既充当客户端也充当服务器。
服务端::package net;import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;import .ServerSocket;import .Socket;import java.util.Scanner;public class Server {public Server(){try {// conn为connection的缩写;ServerSocket服务器端⼝// 后⾯ServerSocket(1234)⾥⾯的1234为端⼝号,要⼤于 1024⼩于65535. 0~1024为系统预留的端⼝号,总共⼀共有65535个端⼝号ServerSocket ss = new ServerSocket(1234); // 服务器新建⼀个端⼝,端⼝号为1234System.out.println("成功启动服务器,等待客户端连接");Socket tcpConn = ss.accept(); // 接收客户端的链接// tcpConn.getInetAddress()获取连⼊服务器的客户端的ip地址; tcpConn.getPort()获取连⼊服务器的客户端的端⼝号System.out.println("收到客户端连接,来⾃:" + tcpConn.getInetAddress() + ":" + tcpConn.getPort());// 读取客户端给服务器的东西,并且返回东西给客户端InputStream in = tcpConn.getInputStream(); // 获取数据Scanner netIn = new Scanner(in); // ⽤这个⽅法可以获取客户端传过来的数据,但不是很好。
用Socket编写CS结构程序

用socket编写C/S结构程序的流程图1.面向连接的套接字的系统调用时序图无连接协议的套接字调用时序图面向连接的应用程序流程图Socket编程实例代码实例中的服务器通过socket连接向客户端发送字符串"Hello, you are connected!"。
只要在服务器上运行该服务器软件,在客户端运行客户软件,客户端就会收到该字符串。
该服务器软件代码如下:#include <stdio.h>#include <stdlib.h>#include <errno.h>#include <string.h>#include <sys/types.h>#include <netinet/in.h>#include <sys/socket.h>#include <sys/wait.h>#define SERVPORT 3333 /*服务器监听端口号*/#define BACKLOG 10 /* 最大同时连接请求数*/main(){intsockfd,client_fd; /*sock_fd:监听socket;client_fd:数据传输socket */ structsockaddr_inmy_addr; /* 本机地址信息*/structsockaddr_inremote_addr; /* 客户端地址信息*/if ((sockfd = socket(AF_INET, SOCK_STREAM, 0)) == -1){perror("socket创建出错!"); exit(1);}my_addr.sin_family=AF_INET;my_addr.sin_port=htons(SERVPORT);my_addr.sin_addr.s_addr = INADDR_ANY;bzero(&(my_addr.sin_zero),8);if (bind(sockfd, (structsockaddr *)&my_addr, sizeof(structsockaddr)) == -1){perror("bind出错!");exit(1);}if (listen(sockfd, BACKLOG) == -1) {perror("listen出错!");exit(1);}while(1){sin_size = sizeof(structsockaddr_in);if ((client_fd = accept(sockfd, (structsockaddr *)&remote_addr, &sin_size)) == -1){perror("accept出错");continue;}printf("received a connection from %s ", inet_ntoa(remote_addr.sin_addr));if (!fork()){ /* 子进程代码段*/if (send(client_fd, "Hello, you are connected! ", 26, 0) == -1)perror("send出错!");close(client_fd);exit(0);}close(client_fd);}}服务器的工作流程是这样的:首先调用socket函数创建一个Socket,然后调用bind函数将其与本机地址以及一个本地端口号绑定,然后调用listen在相应的socket上监听,当accpet接收到一个连接服务请求时,将生成一个新的socket。
socket编程实例

socket编程实例Socket编程是指客户端和服务端之间的通信方式,主要用于网络连接和数据传输。
Socket编程既可以是TCP编程,也可以是UDP编程。
本文将介绍网络编程的基本概念,以及介绍实例,以帮助理解Socket编程的用途和实现方法。
一、Socket编程的基本概念1.1 SocketSocket指的是客户端和服务端之间的数据流,也就是客户端和服务端之间数据连接的一种抽象概念。
每个Socket都有一个socket ID,每个ID会标识一个特定的数据流,在random port上产生一个socket,它可以被复用,从而实现客户端和服务端之间的数据通信。
1.2 传输协议网络上的数据传输需要标准的协议,这种协议可以用来指导客户端和服务端之间的通信。
比如,TCP/IP协议是一种常用的传输协议,它包括TCP和IP两个部分,TCP是传输控制协议,而IP是网络接口协议。
在socket编程中,一般都会使用TCP/IP协议来控制数据流,实现客户端和服务端之间的数据通信。
1.3程语言socket编程可以使用多种编程语言,比如C/C++、Java、Python 等。
不同的语言有不同的实现方式,比如C/C++是通过Socket接口函数来实现的,而Java则是通过Socket类和ServerSocket类来实现的,而Python则是通过socket模块来实现的。
任何一种语言都可以用来实现socket编程,但是有些语言会更容易理解并维护。
二、socket编程的实例2.1 例1:TCP服务端下面是使用C++编写的TCP服务端实例,该程序可以接受客户端发送的数据并将发送的数据原封不动地返回给客户端:#include <iostream>#include <string>#include <netinet/in.h>#include <sys/socket.h>#include <unistd.h>int main(){//建Socketconst int servfd=socket(AF_INET,SOCK_STREAM,0);//始化地址结构struct sockaddr_in addr;addr.sin_family=AF_INET;addr.sin_port=htons(8080);addr.sin_addr.s_addr=htonl(INADDR_ANY);//定Socketbind(servfd,(struct sockaddr*)&addr,sizeof(addr));//启监听listen(servfd,5);//环接收客户端的连接while(1){//收客户端的连接int clifd=accept(servfd,NULL,NULL);//环接收客户端发送的数据while(1){//收客户端发送的数据char buf[1024];int len=recv(clifd,buf,sizeof(buf),0);//据接收完毕if(len==0){printf(client disconnectedclose(clifd);break;}//收到的数据原封不动地返回给客户端send(clifd,buf,len,0);}}return 0;}2.2 例2:TCP客户端下面是使用C++编写的TCP客户端实例,该程序可以连接到服务端并将发送的数据原封不动地返回给客户端:#include <iostream>#include <string>#include <netinet/in.h>#include <sys/socket.h>#include <unistd.h>int main(){//接服务端int clifd=socket(AF_INET,SOCK_STREAM,0);//始化服务端地址结构struct sockaddr_in addr;addr.sin_family=AF_INET;addr.sin_port=htons(8080);addr.sin_addr.s_addr=htonl(INADDR_ANY);connect(clifd,(struct sockaddr*)&addr,sizeof(addr));//环发送数据给服务端while(1){//送数据给服务端std::string sendData;std::cout<<input something to send to server:<<std::endl; std::cin>>sendData;send(clifd,sendData.c_str(),sendData.size(),0);//收来自服务端的数据char buf[1024];int len=recv(clifd,buf,sizeof(buf),0);if(len>0){printf(response from server: %sbuf);}}return 0;}三、结论从上面的实例中,可以看出,socket编程是一种简单而又强大的网络编程技术,它可以用来实现客户端和服务端之间的数据传输。
socket编程实例

socket编程实例Socket编程是一种基于连接的网络编程技术,它可以让两台计算机相互连接,允许它们通信。
对于Socket编程,可以用C或Python语言编写客户端和服务器应用程序,这些应用程序会在不同的计算机之间通信。
下面的Socket编程实例说明如何使用C和Python编写客户端和服务器应用程序。
使用C语言编写的Socket编程实例首先,创建一个socket文件:#include <sys/types.h>#include <sys/socket.h>int sockfd = socket(AF_INET, SOCK_STREAM, 0);然后,将socket设置为服务器模式,使它能够连接到客户端:struct sockaddr_in serv_addr;serv_addr.sin_family = AF_INET;serv_addr.sin_addr.s_addr = htonl(INADDR_ANY);serv_addr.sin_port = htons(PORT_NUMBER);bind(sockfd, (struct sockaddr*)& serv_addr,sizeof(serv_addr));listen(sockfd, 5);最后,接受客户端的连接,并处理客户端的消息:int connfd = accept(sockfd, (struct sockaddr*)NULL, NULL); char buff[1024] = {0};read(connfd, buff, sizeof(buff));//Do something with the buffwrite(connfd, response, strlen(response));close(sockfd);使用Python编写的Socket编程实例首先,创建一个socket文件:import socketsock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)然后,将socket设置为服务器模式,使它能够连接到客户端:server_address = ('localhost', 10000)sock.bind(server_address)sock.listen(1)最后,接受客户端的连接,并处理客户端的消息:connection, client_address = sock.accept()try:while True:data = connection.recv(1024)if data:#Do something with the dataconnection.sendall(response)else:breakfinally:connection.close()。
java socket编程例子

java socket编程例子JavaSocket编程是当今Java语言分布式应用编程中不可或缺的一部分。
通过它,开发者可以编写自己的网络应用程序,使用TCP/IP 协议构建客户/服务器应用程序。
在本文中,我们将介绍如何通过Java Socket编程构建一个简单的客户/服务器应用程序,并讨论编程步骤及相关的详细信息。
Socket基础知识Socket是网络通信的一种基础抽象,它包含了通信活动所需的实体或对象。
它允许客户/服务器应用程序在两端打开通信链路,并通过它进行双向的数据传输。
Socket支持的API受到操作系统的支持。
它的实现依赖于与操作系统有关的底层网络API,例如BSD sockets for UNIX-based systems和Winsock for Windows。
Java Socket编程Java语言本身提供了对Socket编程实现的支持,用户不必关心底层的实现细节及协议。
Socket编程也包括实现客户端和服务器端应用程序的所有重要操作,从初始化到终止。
Java Socket编程提供了一种可以在网络中连接客户端和服务器端的方法。
它可以实现远程对象访问(RMI)、网络访问服务(webservices)等多种功能。
编写程序本节将介绍如何使用Java Socket编程来实现客户端/服务器应用程序。
我们将分别介绍客户端和服务器端程序。
客户端程序客户端使用Java Socket API中的Socket类,通过创建一个Socket对象,来向服务器发起连接。
客户端代码:import .Socket;public class MyClient {public static void main(String[] args) {try {//建Socket对象,向服务器发起连接Socket socket = new Socket(localhost 5000);System.out.println(客户端已连接} catch (Exception e) {e.printStackTrace();}}}上面的代码创建了一个Socket对象,并以localhost为服务器地址,端口号为5000连接到了服务器端。
socket编程 例子

socket编程例子下面是一个简单的Python socket编程例子,该示例演示了如何使用socket模块在客户端和服务器之间进行通信。
服务器端代码:pythonimport socket# 创建一个TCP/IP socketserver_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)# 绑定服务器地址和端口server_address =('localhost', 12345)server_socket.bind(server_address)# 监听传入的连接server_socket.listen(1)print('服务器已启动,监听中...')while True: # 等待连接print('等待连接...') client_socket, client_address =server_socket.accept() print('客户端已连接:', client_address) try: # 接收数据data = client_socket.recv(1024) if data:# 打印接收到的数据print('收到数据:', data.decode())# 发送响应数据response = 'Hello, client!'client_socket.sendall(response.encode()) finally: # 关闭连接client_socket.close()客户端代码:pythonimport socket# 创建一个TCP/IP socketclient_socket = socket.socket(socket.AF_INET,socket.SOCK_STREAM)# 设置服务器地址和端口server_address =('localhost', 12345)# 连接服务器client_socket.connect(server_address)try: # 发送数据message = 'Hello, server!'client_socket.sendall(message.encode()) # 接收响应data =client_socket.recv(1024) print('收到响应:', data.decode())finally: # 关闭连接client_socket.close()这个例子中,服务器端创建一个TCP socket,并使用bind()方法绑定服务器地址和端口。
Socket的CS模式的完整例子C#

所谓C/S模式中的C是Client,表示客户端,S是Server,表示服务器;还有另外一个模式B/S,B是Browser,表示浏览器,S是Server,表示服务器。
C/S模式主要是指在Winform 中进行开发,而B/S主要是在中进行开发。
本节先介绍C/S模式,有关B/S模式将会在后面有关的章节中进行介绍。
基于Socket服务器端实现本例主要是建立多客户端与服务器之间的数据传输,首先设计服务器。
打开VS2008,在D:\C#\ch17目录下建立名为SocketServer的Windows应用程序。
打开工程,往当前窗体中添加控件,如表17-6所示。
表17-6 添加控件列表设计好的界面如图17-2所示。
接下来开始运用前面的知识设计服务器,主要分为以下步骤。
(1)首先是对一些命名空间的包含,包括、.Sockets、System.IO 和System.Threading。
然后定义一系列的全局变量,如下所示。
private Socket s; //定义Socket对象private Thread th; //客户端连接服务器的线程public Socket cSocket; //单个客户端连接的Socket对象public NetworkStream ns; //网络流public StreamReader sr; //流读取public StreamWriter sw; //流写入private delegate void SetTextCallback(); //用于操作主线程控件(2)接下来是设计客户端连接的管理,主要包括服务器与客户端之间的连接和收发数据问题,把它们放在一个函数Communication里,如下所示。
public void Communication(){while (true){try{cSocket = s.Accept(); //用cSocket来代表该客户端连接if (cSocket.Connected) //测试是否连接成功{ns = new NetworkStream(cSocket); //建立网络流,便于数据的读取 sr = new StreamReader(ns); //实例化流读取对象sw = new StreamWriter(ns); //实例化写入流对象test(); //从流中读取sw.WriteLine("收到请求,允许连接"); //向流中写入数据sw.Flush(); //清理缓冲区}else{MessageBox.Show("连接失败");}}catch (SocketException ex){MessageBox.Show(ex.Message); //捕获Socket异常}catch (Exception es){MessageBox.Show("其他异常" + es.Message); //捕获其他异常}}}//以下代码的用法在第16章有关线程的用法时曾提到过,主要用于从当前线程操作主线程中的控件,这里就不在赘//述public void send(){lbInfo.Items.Add(sr.ReadLine()+"\n");}public void test(){SetTextCallback stcb = new SetTextCallback(send);Invoke(stcb);}(3)定义好与客户端的连接后,接下来需要利用线程来启动,双击“启动服务器”按钮,添加如下代码。
linux下java程序与C语言程序通过SOCKET通信的简单例子

【09.04.14】linux下java程序与C语言程序通过SOCKET通信的简单例子今天上午实验了java程序与c语言程序通过socket进行通信。
由于没学过java,因此只是编写了C语言端的代码,java端的代码是从网上别的文章中找的,经过少量修改后与C语言端程序通信成功。
本例中C语言端作为服务器,java端作为客户端代码如下:/****************** server program *****************/#include <stdio.h>#include <sys/types.h>#include <sys/socket.h>#include <string.h>#include <stdlib.h>#include <sys/un.h>#include <pthread.h>#include <arpa/inet.h>int sockfd,newfd;void *read_socket();int main(){int ret;pthread_t read_tid,write_tid;struct sockaddr_in server_addr;server_addr.sin_family=AF_INET;/*设置域为IPV4*/server_addr.sin_addr.s_addr=INADDR_ANY;/*绑定到INADDR_ANY 地址*/server_addr.sin_port=htons(5678);/*通信端口号为5678,注意这里必须要用htons函数处理一下,不能直接写5678,否则可能会连不上*/sockfd=socket(AF_INET,SOCK_STREAM,0);if (sockfd<0){printf("调用socket函数建立socket描述符出错!¥n");exit(1);}printf("调用socket函数建立socket描述符成功!¥n");ret=bind(sockfd,(struct sockaddr *)(&server_addr),sizeof(server_addr));perror("server");if (ret<0){printf("调用bind函数绑定套接字与地址出错!¥n");exit(2);}printf("调用bind函数绑定套接字与地址成功!¥n");ret=listen(sockfd,4);if (ret<0){printf("调用listen函数出错,无法宣告服务器已经可以接受连接!¥n");exit(3);}printf("调用listen函数成功,宣告服务器已经可以接受连接请求!¥n");newfd=accept(sockfd,NULL,NULL);/*newfd连接到调用connect的客户端*/if (newfd<0){printf("调用accept函数出错,无法接受连接请求,建立连接失败!¥n");exit(4);}printf("调用accept函数成功,服务器与客户端建立连接成功!¥n");/** 服务器端建立一个线程,负责从socket读取数据,当然此处并不一定非要建立一个新线程,直接在原线程中写也可以**/pthread_create(&read_tid,NULL,read_socket,NULL);/********************* 令原线程睡眠************************/while(1){sleep(10000);}}/****************** 从socket读取数据********************/void *read_socket(){int recv_num,recv_num_total=0;char recv_buf[50];while (1){memset(recv_buf,0,sizeof(recv_buf));/*清空一下recv_buf缓存区*/recv_num=recv(newfd,recv_buf,26,0);if (recv_num<0)printf("服务器端:调用recv接收失败!¥n");else if(recv_num>0){recv_num_total+=recv_num;printf("服务器端:调用recv接收成功!本次接收到%d个字节,内容为:¥"%s¥"。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Java Socket CS示例程序1背景介绍Java是随着网络的盛行而逐渐被人认可的,可想而知其网络编程的能力有多强大。
本文介绍一个Java Socket CS模型的一个简单示例,简单但不低端。
程序是在本地模拟CS模型,即服务端和客户端两个程序可以相互通信。
实现形式是两个程序分别定义好要说的话,然后按顺序交互在终端打印。
2Socket通信过程真实中的通信类似QQ是两个或多个程序在不同的电脑上,通过互联网交换信息。
程序间是通过通过(IP地址:端口号)的形式来实现互相访问的。
那么两个程序在本地又是怎么能互相连接的,又是如何交换信息的?仔细看上图,首先建立监听程序SeverSocket()来作为服务端,服务端调用accept()方法不断在所设端口监听是否有要求连接的请求。
此时建立客户端程序,该客户端是以发送Socket()套接字的方式建立的。
客户端往所设端口去请求服务,如果遇到accept(),则双方达成连接共识于是建立连接。
连上之后,双方是通过发送socket套接字来实现交流的。
套接字封装了网络通信底层包括协议,端口地址等信息。
客户端要发送信息,其次用建立输出流,输出流另外一段是socket套接字,只要往该流里面println()数据,则会自动封装到该套接字里面。
发送时,将socket 套接字发送给服务端。
服务端收到套接字,从套接字找到携带的信息放入输入流,然后输入流端通过readLine()就可以直接将信息打印在屏幕上了。
此时服务端要往客户端发送信息,过程一样,将信息写入输出流,然后封装成套接字,对方接受套接字,将信息放到输出流,然后就能输出该信息了。
套接字起到了封转底层的作用,程序互联变得很容易,而用输入输出流连接中介转接套接字,一是套接字无法直接输出内容,二是通过流的形式输入输出信息,是Java推荐的,因为其本身包含大量方法,用起来会非常得心应手。
最后,要关闭连接要释放端口等资源。
3示例过程介绍本段通过具体例子来加深读者对Socket通信过程的印象。
1)建立服务器ServerSocket()2)服务器调用accept()方法来监听9999端口。
3)建立客户端Socket,往9999端口发送套接字,请求连接。
4)服务器accept()方法收到一个套接字,说是某某程序想要跟服务器建立连接。
accept()接受该请求,于是俩程序建立连接。
5)现在客户机想给服务器发送一个字符串“你好,我是客户机”。
首先客户机将该字符串用Println()封装到输出流PrintWriter里面,PrintWriter将该信息再封装到套接字socket里面。
于是再向服务器端口发送套接字。
6)服务器端口又接到套接字,将该套接字放到InputStreamReader里面解封装,再用readLine()方法读取里面的字符串,print()到屏幕上面,打印出“你好,我是客户机”。
7)服务器想回送客户机一个信息,如“我是服务器,你发来的信息已收到”。
同样是将该字符串封装到输出流PrintWriter里面,该输出流再封装成套接字socket,发送给客户端。
8)客户端同样是接收该套接字,解封装到输入流InputStreamReader,然后再从该流里面readLine()取出信息,print()打印到屏幕,出来“我是服务器,你发来的信息已收到”的信息。
如此可实现反复的半双工通信。
9)双方用close()方法释放连接。
4完整代码服务器端程序(tempServer)5package com.futeng.temp;6/*7*内容:Java Socket编程示例(@futeng)8*制作:@futeng#1.0/2012/07319*说明:10*/11import java.io.BufferedReader;12import java.io.InputStreamReader;13import java.io.PrintWriter;14import .*;1516public class tempServer{17/*18*服务端Server客户端Client19*20*服务器监听ServerSocekt()21*|22*阻塞,等待客户连接accept()<--------发送连接请求Socket()23*||24*||25*读取客户端所发送的数据readLine()<--------向服务端发送数据Println()26*||27*向客户端发送数据Println------------>读取服务端信息readLine()28*||29*关闭连接close()关闭连接close()30*31*/32public tempServer()33{34try35{//建立服务器端程序serversocket,并默认不断扫描8888端口。
36ServerSocket serversocket=new ServerSocket(8888);37System.out.println("Hi,我是服务器,正在监听8888端口...");3839//Java用Socket套接字封装了底层的协议端口等,换而言之,两个进程都是通过传递套接字来进行通信。
40//声明一个Socket类的套接字来存储来往信息41//accept()方法返回接收到的套接字,返回值类型为Socket类,刚好赋值给socket实例对象。
42Socket socket=serversocket.accept();4344//服务器端接受从客户端发送过来的数据。
套接字不能直接打开,需要用输入流的方式打开。
45//建立输入流InputStreamRead实例in来存储从客户端发送过来的套接字46InputStreamReader isr=new InputStreamReader(socket.getInputStream()); 47//用BufferRead类来封装下该输入流类isr实例。
封装的目的在于BufferRead类可以很容易的输出信息。
48BufferedReader in=new BufferedReader(isr);49//BufferRead类方法readLine()来接受数据并处理为String型50String info=in.readLine();51System.out.println("服务器:我收到来自客户端的信息为---->"+info);5253//服务器往客户机输出信息54PrintWriter out=new PrintWriter(socket.getOutputStream(),true);55out.println("我是服务器,这是我发给客户机的信息。
");5657}catch(Exception e)58{59 e.printStackTrace();60}61}6263public static void main(String[]args)64{65tempServer ts=new tempServer();66}6768}客户端程序(tempClient)69package com.futeng.temp;7071import .*;72import java.io.*;7374public class tempClient{75public tempClient()76{77try78{//建立客户端程序,Socket套接字有一套完整的传输机制。
79//建立一个Socket来请求连接服务器端,80//此处Socket寻找的是本机localhost中的8888端口。
81//如果一旦发现该端口被监听,则socket立即与之产生联系,于是就可以互相通信。
82Socket socket=new Socket("127.0.0.1",8888);8384//客户端往socket里面输出信息,服务器接收socket然后阅读里面信息。
socket起到的是封装作用。
85//socket通过输出流将数据写入86//因为不能直接往套接字里面写数据,所以需要建一个输出流,建PrintWriter类实例out,这个out是连接套接字的输出流的。
87//即往out里面写数据,就相当于写入了该套接字88PrintWriter out=new PrintWriter(socket.getOutputStream(),true);89out.println("我是客户端,我正往服务器输出数据...");9091//客户端接受服务器发送的信息92InputStreamReader isr=new InputStreamReader(socket.getInputStream()); 93BufferedReader in=new BufferedReader(isr);9495//接受信息从服务器96String info=in.readLine();97System.out.println("我是客户机,服务器给我发送的信息是:"+info);9899100101102}catch(Exception e)103{104 e.printStackTrace();105}106107}108109public static void main(String[]args)110{111tempClient tc=new tempClient();112}113}5运行方法在Eclipse中运行,新建一个项目,在src目录下新建两个文件class,分别命名为tempServer和tempClient,并且修改源代码包为你的包名。
即修改首行package com.futeng.temp;为你的包,如你的包名为com.abc.test则修改为package com.abc.test;。
先运行Server再运行tempClient,这是你就会看到如下输出。
运行服务器端运行客户机端停止程序后输出6结束语文章发布地址:/s/blog_a02a31ce010166oe.html更多内容请访问:FUTENG科技新浪博客问题与留言访问:FUTENG科技新浪微博欢迎访问与支持FUTENG官方网站的建设,你还可以下载本博客的安卓客户端。