导航:首页 > 配服务器 > c客户端如何调用服务器端

c客户端如何调用服务器端

发布时间:2023-08-27 11:36:36

① C# 怎样才能实现客户端通过服务器端连接数据库服务器

可以处理的,步骤为:
1.客户端与服务器连(用Socket通讯)
2.客户端向处服务器发送SQL语句,如搜索一个表的数据
3.服务器接到请求,执行SQL语句返回一个DataTable
4.服务器将这个DataTable进行序列化、并且压缩
5.服务器将【序列化和压缩】后的byte[] msg数组传给客户端
6.客户端收到byte[] msg数组先进行解压缩、和反序列化为DataTable
7.再将DataTable通过DataSet和SqlDataAdapter.Update(Table)存在SQL中
下面我只给一些关键的代码,我有实现过的

第一步.客户端==》连接服务器并通讯,主要是发送SQL给服务器返回一个DataTable表
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Net;
using System.Net.Sockets;
using System.Xml;
using System.Xml.Serialization;
using System.IO;
using System.IO.Compression;

namespace Client
{
public partial class FormClient : Form
{
DataTable dt;
public FormClient()
{
InitializeComponent();
}

private void ClientTest(string str)
{
Socket client;
String returnData;
byte[] buf = new byte[9991024]; //此处可能有些问题
//IPAddress local = IPAddress.Parse("116.25.83.127");
IPAddress local = IPAddress.Parse("127.0.0.1");//可改为远程IP地址
IPEndPoint iep = new IPEndPoint(local, 6060);
try
{
client = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
client.Connect(iep);
}
catch (SocketException)
{
Console.WriteLine("无法连接到服务器!");
return ;
}

//输入exit,可以断开与服务器的连接
if (str == "")
{
return;
}
//发送SQL语句给服务器
client.Send(Encoding.Unicode.GetBytes(str));

//得到实际收到的字节总数
Int32 rec = client.Receive(buf);
Console.WriteLine(Encoding.ASCII.GetString(buf, 0, rec));
//接收服务器返回的数据
returnData = System.Text.Encoding.Unicode.GetString(buf,0,rec);

//将returnData解压缩后,再反序列化转成DataTable dt = DeserializerDataTable(Decompress(returnData));
Console.WriteLine("断开与服务器的连接......");
client.Close();
dataGridView1.DataSource = dt;
}

//将DataTable表反序列化
private DataTable DeserializerDataTable(string pXml)
{
StringReader strReader = new StringReader(pXml);
XmlReader xmlReader = XmlReader.Create(strReader);
XmlSerializer serializer = new XmlSerializer(typeof(DataTable));
DataTable dt = serializer.Deserialize(xmlReader) as DataTable;

return dt; }
//给服务器传SQL语句
private void buttonSearch_Click(object sender, EventArgs e)
{
string Sql = String.Format("Select top {0} * From Part Where CorpCode_='PT'", textBox1.Text.Trim()); ;
ClientTest(Sql);

}
#region 压缩和解压缩
public string Compress(string str)
{
byte[] buffer = Encoding.Unicode.GetBytes(str);
MemoryStream ms = new MemoryStream();
using (GZipStream zip = new GZipStream(ms, CompressionMode.Compress, true))
{
zip.Write(buffer, 0, buffer.Length);
}
ms.Position = 0;
MemoryStream outStream = new MemoryStream();
byte[] compressed = new byte[ms.Length];
ms.Read(compressed, 0, compressed.Length);

byte[] gzBuffer = new byte[compressed.Length + 4];
System.Buffer.BlockCopy(compressed, 0, gzBuffer, 4, compressed.Length);
System.Buffer.BlockCopy(BitConverter.GetBytes(buffer.Length), 0, gzBuffer, 0, 4);
return Convert.ToBase64String(gzBuffer);
}

//解压缩
public string Decompress(string compressedText)
{
byte[] gzBuffer = Convert.FromBase64String(compressedText);
using (MemoryStream ms = new MemoryStream())
{
int msgLength = BitConverter.ToInt32(gzBuffer, 0);
ms.Write(gzBuffer, 4, gzBuffer.Length - 4);
byte[] buffer = new byte[msgLength];
ms.Position = 0;
using (GZipStream zip = new GZipStream(ms, CompressionMode.Decompress))
{
zip.Read(buffer, 0, buffer.Length);
}
return Encoding.Unicode.GetString(buffer);
}
}

#endregion
}
}

第二步.服务器收到SQL语句执行,并回传一个表给客户端
服务器接到请求,执行SQL语句返回一个DataTable
服务器将这个DataTable进行序列化、并且压缩
服务器将【序列化和压缩】后的byte[] msg数组传给客户端

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Net;
using System.Net.Sockets; //可以使用套接字
using System.Threading; //可以使用多线程
using System.Data.SqlClient;
using System.Xml;
using System.Xml.Serialization;
using System.IO;
using System.IO.Compression;

namespace AppServer
{
public partial class FormApp : Form
{
public FormApp()
{
InitializeComponent();
}
private void FormApp_Load(object sender, EventArgs e)
{
// AppService instance = new AppService();
}

private void buttonStartService_Click(object sender, EventArgs e)
{
AppService();

}
private Socket server;
private Socket client;
private void AppService()
{
/*
//本机IP
string name = Dns.GetHostName();
IPHostEntry host = Dns.GetHostByName(name);
IPAddress id= host.AddressList[0];
* */

//IPAddress local = IPAddress.Parse("192.168.0.100");
IPEndPoint iep = new IPEndPoint(IPAddress.Any, 6060);
server = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
// 将套接字与本地终结点绑定
server.Bind(iep);
//在本地13000端口号上进行监听
server.Listen(10);
while (true)
{
// 得到包含客户端信息的套接字
client = server.Accept();
//创建消息服务线程对象ClientService方法委托给线程
Thread newthread = new Thread(new ThreadStart(ClientService));
// 启动消息服务线程
newthread.Start();
}
}
private Int32 i;
private void ClientService()
{
Socket s = client;
String data = null;
String returnData = null;
byte[] bytes = new byte[1024];

while ((i = s.Receive(bytes)) != 0)
{
//接收客户端的SQL
data = System.Text.Encoding.Unicode.GetString(bytes, 0, i);
//将接到的String 执行SQL返回表
DBAccess obj = new DBAccess(); //专门传给SQL的类相当于DBHELP
DataTable dt = obj.FillData(data, "TEST", 1);//执行SQL返回表

//将返回的表转为String,并将returnData压缩
returnData = obj.Compress(obj.SerializeDataTableXml(dt));
byte[] msg = System.Text.Encoding.Unicode.GetBytes(returnData);

// 发送数据表给客户端 s.Send(msg);
if ((i = s.Receive(bytes)) == 0)
continue;
}
//关闭套接字
s.Close();
}
}

//DBAccess的部份代码

class DBAccess
{
#region DataTable序列化与反序列化
public string SerializeDataTableXml(DataTable dt)
{
StringBuilder sb = new StringBuilder();
XmlWriter writer = XmlWriter.Create(sb);
XmlSerializer serializer = new XmlSerializer(typeof(DataTable));
serializer.Serialize(writer, dt);
writer.Close();

return sb.ToString(); }
public DataTable DeserializerDataTable(string pXml)
{
StringReader strReader = new StringReader(pXml);
XmlReader xmlReader = XmlReader.Create(strReader);
XmlSerializer serializer = new XmlSerializer(typeof(DataTable));
DataTable dt = serializer.Deserialize(xmlReader) as DataTable;

return dt; }
#endregion
#region 压缩和解压缩
public string Compress(string str)
{
byte[] buffer = Encoding.Unicode.GetBytes(str);
MemoryStream ms = new MemoryStream();
using (GZipStream zip = new GZipStream(ms, CompressionMode.Compress, true))
{
zip.Write(buffer, 0, buffer.Length);
}
ms.Position = 0;
MemoryStream outStream = new MemoryStream();
byte[] compressed = new byte[ms.Length];
ms.Read(compressed, 0, compressed.Length);

byte[] gzBuffer = new byte[compressed.Length + 4];
System.Buffer.BlockCopy(compressed, 0, gzBuffer, 4, compressed.Length);
System.Buffer.BlockCopy(BitConverter.GetBytes(buffer.Length), 0, gzBuffer, 0, 4);
return Convert.ToBase64String(gzBuffer);
}

public string Decompress(string compressedText)
{
byte[] gzBuffer = Convert.FromBase64String(compressedText);
using (MemoryStream ms = new MemoryStream())
{
int msgLength = BitConverter.ToInt32(gzBuffer, 0);
ms.Write(gzBuffer, 4, gzBuffer.Length - 4);
byte[] buffer = new byte[msgLength];
ms.Position = 0;
using (GZipStream zip = new GZipStream(ms, CompressionMode.Decompress))
{
zip.Read(buffer, 0, buffer.Length);
}
return Encoding.Unicode.GetString(buffer);
}
}

#endregion
}

第三步.调用DataSet和SqlDataAdapter.Update(Table)存在SQL中,这个是传入一个DataGridView ,可在客户端中使用保存(部份代码,没有连接SQL数据库的)
#region 公共保存DataGridView
public bool DataGridViewSave(DataTable table,string tableName,string CorpCode)
{
string Sql = String.Format("Select Top 0 * From {0} Where CorpCode_='{1}' ", tableName, CorpCode);
SqlDataAdapter sda = new SqlDataAdapter(this.CreateCommand(Sql, null, 1));
SqlCommandBuilder scb = new SqlCommandBuilder(sda);
sda.Update(table);
this.Close();
return true;
}
#endregion

② C/S系统客户端如何与服务器连接

一般是连接数据库服务器,以连接SQLSERVER为例,需要NEW一个SQLConnect,然后赋值连接参数,最后打开这个连接就好了。
连接参数示例如下:
Provider=SQLOLEDB.1; #连接数据库的驱动程序,SQL Server是 SQLOLEDB.1
Password="******"; #登录口令
User ID=sa; #登录ID
Initial Catalog=xxxxxx; #数据库名称
Data Source=192.168.10.2 #SQLSERVER服务器名或IP地址

③ 客户端与服务器端的通讯,C++书写步骤。

C++通过socket编程实现服务端与客户端的通讯,代码如下(个人环境下测试正常,如果遇到运行send发送报错,请检查服务器端口是否被占用,调试的时候请先运行服务端程序在运行客服端,一定要加载库函数ws2_32.lib,发送字符时应该多加一个空字符作为结束字符):

服务器端程序:

//Server.cpp:.
#include"winsock2.h"
#pragmacomment(lib,"ws2_32.lib")
#include<iostream>
usingnamespacestd;
intmain(intargc,char*argv[])
{
constintBUF_SIZE=64;
WSADATAwsd;//WSADATA变量
SOCKETsServer;//服务器套接字
SOCKETsClient;//客户端套接字
SOCKADDR_INaddrServ;;//服务器地址
charbuf[BUF_SIZE];//接收数据缓冲区
charsendBuf[BUF_SIZE];//返回给客户端得数据
intretVal;//返回值
//初始化套结字动态库
if(WSAStartup(MAKEWORD(2,2),&wsd)!=0)
{
cout<<"WSAStartupfailed!"<<endl;
return1;
}

//创建套接字
sServer=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
if(INVALID_SOCKET==sServer)
{
cout<<"socketfailed!"<<endl;
WSACleanup();//释放套接字资源;
return-1;
}

//服务器套接字地址
addrServ.sin_family=AF_INET;
addrServ.sin_port=htons(4999);
addrServ.sin_addr.s_addr=INADDR_ANY;
//绑定套接字
retVal=bind(sServer,(LPSOCKADDR)&addrServ,sizeof(SOCKADDR_IN));
if(SOCKET_ERROR==retVal)
{
cout<<"bindfailed!"<<endl;
closesocket(sServer);//关闭套接字
WSACleanup();//释放套接字资源;
return-1;
}

//开始监听
retVal=listen(sServer,1);
if(SOCKET_ERROR==retVal)
{
cout<<"listenfailed!"<<endl;
closesocket(sServer);//关闭套接字
WSACleanup();//释放套接字资源;
return-1;
}

//接受客户端请求
sockaddr_inaddrClient;
intaddrClientlen=sizeof(addrClient);
sClient=accept(sServer,(sockaddrFAR*)&addrClient,&addrClientlen);
if(INVALID_SOCKET==sClient)
{
cout<<"acceptfailed!"<<endl;
closesocket(sServer);//关闭套接字
WSACleanup();//释放套接字资源;
return-1;
}

while(true)
{
//接收客户端数据
ZeroMemory(buf,BUF_SIZE);
retVal=recv(sClient,buf,BUF_SIZE,0);
if(SOCKET_ERROR==retVal)
{
cout<<"recvfailed!"<<endl;
closesocket(sServer);//关闭套接字
closesocket(sClient);//关闭套接字
WSACleanup();//释放套接字资源;
return-1;
}
if(buf[0]=='0')
break;
cout<<"客户端发送的数据:"<<buf<<endl;

cout<<"向客户端发送数据:";
cin>>sendBuf;

send(sClient,sendBuf,strlen(sendBuf),0);
}

//退出
closesocket(sServer);//关闭套接字
closesocket(sClient);//关闭套接字
WSACleanup();//释放套接字资源;

return0;
}

客户端程序:

#include"winsock2.h"
#include<iostream>
#pragmacomment(lib,"ws2_32.lib")

usingnamespacestd;
BOOLRecvLine(SOCKETs,char*buf);//读取一行数据

intmain(intargc,char*argv[])
{
constintBUF_SIZE=64;

WSADATAwsd;//WSADATA变量
SOCKETsHost;//服务器套接字
SOCKADDR_INservAddr;//服务器地址
charbuf[BUF_SIZE];//接收数据缓冲区
charbufRecv[BUF_SIZE];
intretVal;//返回值
//初始化套结字动态库
if(WSAStartup(MAKEWORD(2,2),&wsd)!=0)
{
cout<<"WSAStartupfailed!"<<endl;
return-1;
}
//创建套接字
sHost=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
if(INVALID_SOCKET==sHost)
{
cout<<"socketfailed!"<<endl;
WSACleanup();//释放套接字资源
return-1;
}

//设置服务器地址和端口
servAddr.sin_family=AF_INET;
servAddr.sin_addr.s_addr=inet_addr("127.0.0.1");
servAddr.sin_port=htons((short)4999);
intnServAddlen=sizeof(servAddr);

//连接服务器
retVal=connect(sHost,(LPSOCKADDR)&servAddr,sizeof(servAddr));
if(SOCKET_ERROR==retVal)
{
cout<<"connectfailed!"<<endl;
closesocket(sHost);//关闭套接字
WSACleanup();//释放套接字资源
return-1;
}
while(true)
{
//向服务器发送数据
ZeroMemory(buf,BUF_SIZE);
cout<<"向服务器发送数据:";
cin>>buf;
retVal=send(sHost,buf,strlen(buf),0);
if(SOCKET_ERROR==retVal)
{
cout<<"sendfailed!"<<endl;
closesocket(sHost);//关闭套接字
WSACleanup();//释放套接字资源
return-1;
}
//RecvLine(sHost,bufRecv);
ZeroMemory(bufRecv,BUF_SIZE);
recv(sHost,bufRecv,BUF_SIZE,0);//接收服务器端的数据,只接收5个字符
cout<<endl<<"从服务器接收数据:"<<bufRecv;
cout<<" ";
}
//退出
closesocket(sHost);//关闭套接字
WSACleanup();//释放套接字资源
return0;
}

④ vb中c/s程序,客户端怎样访问服务器端数据库

在服务端做数据库访问的接口并且实现接口,然后在客户端调用这个接口就可以了,。。

如果是基于互联网的分布式应用也可以用"WebServices+VB"实现

去"微软学生中心"网站下载"Web Service开发入门"视频课件看看,挺简单的

http://www.msuniversity.e.cn/default.aspx

⑤ 客户端怎么连接服务器

问题一:客户端如何连接服务器 客户端通过终端(终端有下载的软件,包括浏览器也属于终端),通过一个端口,连接到服务器指定的端口。服务器会监听这个端口,如何有这个端口的应用访问,则和终端用户交互,从而达到客户端连接服务器的作用。

问题二:客户端怎么连接到服务器的数据库上? 既然是这种数据库,那你就在你的电脑上装SQL SEVER数据库,然后下载对应的数据库管理软件就行了,当然在你安装完本地的数据库后要想访问远程服务器上的数据库一定需要配置,至于你说的一步一步,我觉得你应该网络搜一下,具体的安装都有

问题三:java中客户端与服务器之间怎样连接? socket通信
客户端:Socket s= new Socket (localhost,8888);
服务器:ServerSocket ss户= new ServerSocket(8888);
Socket s=ss.accept();

问题四:客户端无法连接到服务器 您好
您可以尝试一下右击服务器的我的电脑-属性,找到远程桌面的部分,允许下
到服务器防火墙看看,是不是禁用了远程桌面,不懂的话直接关闭防火墙,也希望你没安装第三方网络防火墙

问题五:跪求金蝶K3客户端怎么连接服务器 K3客户端和服务器都要完整安装好,确定是在同一个网关内,并且能够相互PING得通。
然后再服务器上新建一个,与客户端开机登录的用户名和密码一致的用户(我的电脑->右击->管理->本地用户和组->用户),
之后就是在客户端远程组建配置工具中测试,通过后确定就OK了。

问题六:java怎么知道客户端连接服务器 java socket就可以完成

问题七:Android客户端怎么与服务器数据库连接? 客户端和服务端的数据库连接,是要服务器端做开发的,像javaee开发的服务端,然后客户端通过等连接到服务端,然后服务端通过一系列操作,吧数据返回给客户端,这样就完成了一次连接。

问题八:上网认证客户端无法连接认证服务器怎么办? 认证客户端常见问题解答
1.客户端一运行即消失的故障?
答:故障原因:如果用户的电脑设置了多个DNS或多个IP地址及系统里有system32.exe这个进程,可能是木马进程序,有可能伪装成其它的名字的话,会导致以上故障。
故障解决办法如下:正确设置IP地址(只设置网络中心提供的地址)及DNS地址。

2.客户端提示“找不到合适的网卡”故障信息?
答:故障原因:系统没有正确获得网卡信息,或者网卡有问题。
故障解决办法如下:退出并重新打开客户端,如果问题依旧存在,请将网卡驱动程序卸载重装,如果还是不能解决问题,更换一张网卡。

3.客户端提示“目前系统工作环境与软件运行环境相冲突,软件不能正常运行,CODE=2”的故障信息?
答:故障原因:安装了多块网卡,与客户端运行的环境不符合要求。
故障解决办法:卸载或者禁用多余网卡,只保留一张网卡运行。

4.客户端提示“目前系统工作环境与软件运行环境相冲突,软件不能正常运行CODE=4”的故障信息?
答:故障原因:由于安装了代理软件,与客户端运行的环境不符合要求。
故障解决办法:关闭或卸载代理服务器以及一切可能成为代理服务器的软件。

5.客户端认证失败,没有任何的错误提示信息?
答:故障原因:WINXP启用了系统自带的802.1X功能。
故障解决办法:双击网络连接图标,把属性里面的身份验证标签下“启用802.1X身份认证”前的勾去掉。

6.客户端提示认证失败,提示“已达到最大连接数”的故障?
答:故障原因:使用的帐号已在线,可能使用了别人的帐号,或者帐号输入错误。
故障解决办法:确认自己帐号正确性,如果确属自己帐号,则告知相关请有效证件,要求网络中心将其帐号下线。

7.客户端提示认证失败,提示“IP类型错误”的故障?
答:故障原因:认证服务器没有获得IP地址信息。
故障解决办法:在本地连接属性里面把IP获取方式改为自动获取,如果还是不能解决,请将网卡驱动程序卸载重装一次。

8.客户端提示认证失败,提示“XXXX绑定错误”的故障?
答:故障原因:非正常使用帐号;目前使用的网卡相关设置和教育技术办用户信息数据库里的相关绑定记录不一致。
故障解决方法:正确使用个人帐号,不要随意更改设置;带有效证件到网络中心做修改。

9.客户端提示认证失败,提示“网卡未连接上”的故障?
答:故障原因:网线连接不正确,交换机柜停电等。
故障解决方法:检查网线是否正常,确认机房交换机柜是否停电。

10.客户端提示认证失败,认证客户端停顿在:“寻找认证服务器。。。”的故障?
答:故障原因:可能网卡有问题,或者没有选择“使用私有组播地址认证”。
故障解决方法:检查网线是否正常;将速率改成10M,在实际运行中存在某些线路无法进行100M的数据交换;在认证客户端中设置“使用私有组播地址认证”;重装网卡驱动程序;如果问题依旧存在,更换一张网卡。如果在更换网卡之后出现“MAC地址绑定错误”,证明以前用的网卡质量不好,请使用新的网卡,并网络中心重新绑定。

11.客户端提示初始化网卡信息失败的故障?
答:故障原因:电脑有多个网卡信息。
故障解决方法:禁用掉无用的网卡,特别注意,很多笔记本电脑带无线网卡,一定要禁用掉!

12.客户端无法认证成功,提示“不在认证时段内”的故障?
答:故障原因:不在允许的时段内认证使用网络。
故障解决方法:请确认时间段是否为管理人员允许上网的时段。

13.客户端无法认证成功,提示“用户不存在或者密码错”的故障?
......>>

问题九:socket怎样使得多个客户端连接到一个服务器 在服务器端设置一个标志变量,如int flag = 0,当有客户端连接上了,就检查那个标志变量是否为0,如果是的话就连接,然后将这个标志设为1。如果为1的话就拒绝连接。我不知道你是用什么语言编写的,所以具体怎么去拒绝连接就自己多想想吧・・・
在java里面很容易实现,下面是我在java中实现的服务器端代码,希望对你有帮助。。。
package ob;

import java.io.IOException;
import java.ServerSocket;
import java.Socket;

public class Server {
Socket socket;
boolean flag = true;

public void createServer() {

try {
ServerSocket serverSocket = new ServerSocket(9090);
while (true) {

socket = serverSocket.accept();

if (flag) {

System.out.println(有用户连上・・・);

System.out.println(ip:+socket.getRemoteSocketAddress().toString()+ port:+socket.getPort());

flag = false;

}else{

System.out.println(有用户连上・・・);

socket.close();

System.out.println(关闭用户连接・・・);

}
}

} catch (IOException e) {
e.printStackTrace();
}

}
public static void main(String[] args) {
new Server().createServer();
}
}

问题十:socket客户端如何连接服务器端 import java.*;
import java.lang.*;
import java.io.*;
public class MySocketServer
{

public static void main(String args[]) throws IOException
{
try{
ServerSocket myServer = new ServerSocket(8018);
System.out.println(正在监听端口:+myServer.getLocalPort());
Socket myClient = null;

boolean flag = true;
String InputMessage = null;
int c;
while(flag)
{
myClient = myServer.accept();
接收客户端的信息,如果不是Stop就继续监听,加个if判断
DataInputStream dataIn = new DataInputStream(myClient.getInputStream());
DataInputStream dataIn = new DataInputStream(new BufferedInputStream(myClient.getInputStream()));
OutputStream dataOut = myClient.getOutputStream();

while( (InputMessage = dataIn.readLine()) != null )
{
if( InputMessage.equals(stop))
{
flag = false;
break;
}
else
{
System.out.println(从客户端接收到的信息是:+InputMessage);
输入:读取至 末尾-1结束,遇到回车'\n'结束:
while((c=System.in.read())!= -1)
{
dataOut.write((byte)c);
if( c== '\n')
{
dataOut.flush();
......>>

阅读全文

与c客户端如何调用服务器端相关的资料

热点内容
超短macd源码 浏览:163
群晖怎么设置用户访问指定文件夹 浏览:555
安卓怎么测触摸屏 浏览:593
javastring原理 浏览:315
如何关闭手机dhcp服务器 浏览:981
php免费ide 浏览:200
程序员词句 浏览:976
服务器如何禁止某个ip段 浏览:329
便签手机文件夹 浏览:768
gameloft的java游戏 浏览:110
神佑释放怎么转服务器 浏览:735
洋葱app软件怎么登录 浏览:788
两相电空气压缩机 浏览:396
基于51单片机的智能语音密码锁设计 浏览:845
mac如何用ssh登录服务器 浏览:446
appstore怎么设置 浏览:954
在哪个app买韩国女装 浏览:111
php写入文件换行 浏览:749
dsp实现fft算法 浏览:485
棋牌源码转让交易手续费 浏览:293