android客户端与服务器以及web服务器通讯的问题
1、视频播放可以采用bs流媒体播放,但是考虑网络问题,可能在不是wifi下效果不好
2、cs+bs的话,A可以借助数据库存储当前在线的客户端状态,然后B去数据库查询当前客户端的状态,客户端和服务器有一个连接的keeplive机制
可以用android http访问方式访问java客户端。java客户端可以使用action进行连接。。又或者对socket比较熟悉的话,可以使用mina进行socket通信。也是可以的,不过这些都需要时间。没有进行尝试,可以试着写写。至于其他的,参考普通的webproject即可。
1,先google一下下载一个tomcat,
2,再次google一下百度也可以,下载一个eclipse的tomcat插件,解压之后直接放入eclipse的plugin文件夹下面,然后重启eclipse(之后觉的这个步骤好像没什么用)
3,然后启动tamcat,即运行bin文件夹下的startupbat文件。
解答:初步判断,json解析有问题。一般情况下,解析json必须要明确json字符串的内容。通俗地来讲,就是说你要知道整个json字符串的结构组成,有几个大括号{},包括嵌套的大括号{},有几个中括号[],包括嵌套的[]。然后由外及内,最外层肯定是大括号{},就是一个json对象,也就是JsonObject,接着再在这一层,看看有没有中括号[],有的话就是json数组,也就是JsonArray,当前层的字段值可以根据当前层的json对象和字段名获取。如此,往内再走下一层json对象,也就是说查看第二个大括号{},依此类推。
这种功能实际上就是数据同步,同时要考虑手机本身、电量、网络流量等等限制因素,所以通常在移动端上有一下两个解决方案:
1一种是定时去server查询数据,通常是使用HTTP协议来访问web服务器,称Polling(轮询);
2还有一种是移动端和服务器建立长连接,使用XMPP长连接,称Push(推送)。
从耗费的电量、流量和数据延迟性各方面来说,Push有明显的优势。但是使用Push的缺点是:
对于客户端:实现和维护相对成本高,在移动无线网络下维护长连接,相对有一些技术上的开发难度。
对于服务器:如何实现多核并发,cpu作业调度,数量庞大的长连接并发维护等技术,仍存在开发难点。
在讲述Push方案的原理前,先了解一下移动无线网络的特点。
移动无线网络的特点:
因为 IP v4 的 IP 量有限,运营商分配给手机终端的 IP 是运营商内网的 IP,手机要连接 Internet,就需要通过运营商的网关做一个网络地址转换(Network Address Translation,NAT)。简单的说运营商的网关需要维护一个外网 IP、端口到内网 IP、端口的对应关系,以确保内网的手机可以跟 Internet 的服务器通讯
GGSN(Gateway GPRS
Support Node 网关GPRS支持结点)模块就实现了NAT功能。
因为大部分移动无线网络运营商都是为了减少网关的NAT映射表的负荷,所以如果发现链路中有一段时间没有数据通讯时,会删除其对应表,造成链路中断。
Push在Android平台上长连接的实现:
既然自己知道自己移动端要和Internet进行通信,必须通过运营商的网关,所以,为了不让NAT映射表失效,咋们需要定时向Internet发送数据,因为只是为了不然NAT映射表失效,所以只需发送长度为0的数据即可。
这时候就要用到定时器,在android系统上,定时器通常有一下两种:
1javautilTimer
2androidappAlarmManager
分析:
Timer:可以按照计划或者时间周期来执行相关的任务。但是Timer需要用WakeLock来让CPU保持唤醒状态,才能保证任务的执行,这样子会消耗大量流量;当CPU处于休眠的时候,就不能唤醒执行任务,所以应用于移动端明显是不合适。
AlarmManager:AlarmManager类是属于android系统封装好来管理RTC模块的管理类。这里就涉及到RTC模块,要更好地了解两者的区别,就要明白两者真正的区别。
RTC(Real- Time Clock)实时闹钟在一个嵌入式系统中,通常采用RTC
来提供可靠的系统时间,包括时分秒和年月日等;而且要求在系统处于关机状态下它也能够正常工作(通常采用后备电池供电),它的外围也不需要太多的辅助电路,典型的就是只需要一个高精度的32768KHz
晶体和电阻电容等。(如果对这方面感兴趣,可以自己查阅相关资料,这里就说个大概)
好了,回来正题。所以,AlarmManager又称全局定时闹钟。这意味着,当自己用使用AlarmManager来定时执行任务,CPU可以正常地休眠,只有在执行任务是,才唤醒CPU,这个过程是很短时间的。
下面简单来说明其使用:
1类似于Timer功能:
//获得闹钟管理器
AlarmManager
am = (AlarmManager)getSystemService(ALARM_SERVICE);
//设置任务执行计划
amsetRepeating(AlarmManagerELAPSED_REALTIME, firstTime, 51000,
sender);//从firstTime才开始执行,每隔5秒再执行
2实现全局定时功能:
//获得闹钟管理器
AlarmManager
am = (AlarmManager)getSystemService(ALARM_SERVICE);
//设置任务执行计划
amsetRepeating(AlarmManagerELAPSED_REALTIME_WAKEUP, firstTime,
51000, sender);//从firstTime才开始执行,每隔5秒再执行
总结:在android客户端使用Push推送时,应该使用AlarmManager来实现心跳功能,使其真正实现长连接。
commons-netjar里面有ftp相关的接口,这个是我自己封装的一个类
import javaioFileInputStream;
import javaioIOException;
import javanetSocket;
import javautilArrayList;
import javautilList;
import orgapachecommonsnetftpFTP;
import orgapachecommonsnetftpFTPClient;
import orgapachecommonsnetftpFTPReply;
import androidappActivity;
import androidcontentContext;
import androidcontentSharedPreferences;
public class FTPUtils {
/
通过ftp上传文件
@param fileNamePath
要上传的文件路径 , 以'结'尾
@param fileName
要上传的文件名
@return 如果成功返回"" , 否则返回错误结果
/
public static String ftpUpload(String sdcardFullFileName, String fileName, String ftpPath) {
FTPClient ftpClient = new FTPClient();
FileInputStream fis = null;
String returnMessage = "";
try {
ftpClientconnect(ConnectConfigftpIP, ConnectConfigftpPort);
boolean loginResult = ftpClientlogin(ConnectConfigftpUserName, ConnectConfigftpPassWord);
int returnCode = ftpClientgetReplyCode();
if (loginResult && FTPReplyisPositiveCompletion(returnCode)) {// 如果登录成功
String[] splits = ftpPathsplit("/");
String temps = splits[0];
ftpClientmakeDirectory(temps);
for(int i=1;i<splitslength;i++){
temps += "/" + splits[i];
ftpClientmakeDirectory(temps);
}
// ftpClientmakeDirectory(ftpPath);
// 设置上传目录
ftpClientchangeWorkingDirectory(ftpPath);
ftpClientsetBufferSize(1024);
ftpClientsetControlEncoding("UTF-8");
ftpClientsetFileType(FTPBINARY_FILE_TYPE);
ftpCliententerLocalPassiveMode();
fis = new FileInputStream(sdcardFullFileName);
// boolean result = ftpClient(fileName, fis);
boolean result = ftpClientstoreFile(fileName, fis);
if(result){
returnMessage = ""; // 上传成功
}else{
returnMessage = "上传失败";
}
} else {// 如果登录失败
returnMessage = "登录FTP时失败,FTP用户名或者密码错误!";
}
} catch (IOException e) {
// ftp发送出现异常
eprintStackTrace();
returnMessage = "FTP客户端出错!" + e;
} finally {
try {
ftpClientdisconnect();
} catch (IOException e) {
eprintStackTrace();
}
}
return returnMessage;
}
}
问题一:客户端如何连接服务器 客户端通过终端(终端有下载的软件,包括浏览器也属于终端),通过一个端口,连接到服务器指定的端口。服务器会监听这个端口,如何有这个端口的应用访问,则和终端用户交互,从而达到客户端连接服务器的作用。
问题二:客户端怎么连接到服务器的数据库上? 既然是这种数据库,那你就在你的电脑上装SQL SEVER数据库,然后下载对应的数据库管理软件就行了,当然在你安装完本地的数据库后要想访问远程服务器上的数据库一定需要配置,至于你说的一步一步,我觉得你应该百度搜一下,具体的安装都有
问题三:Java中客户端与服务器之间怎样连接? socket通信
客户端:Socket s= new Socket (localhost,8888);
服务器:ServerSocket ss户= new ServerSocket(8888);
Socket s=ssaccept();
问题四:客户端无法连接到服务器 您好
您可以尝试一下右击服务器的我的电脑-属性,找到远程桌面的部分,允许下
到服务器防火墙看看,是不是禁用了远程桌面,不懂的话直接关闭防火墙,也希望你没安装第三方网络防火墙
问题五:跪求金蝶K3客户端怎么连接服务器 K3客户端和服务器都要完整安装好,确定是在同一个网关内,并且能够相互PING得通。
然后再服务器上新建一个,与客户端开机登录的用户名和密码一致的用户(我的电脑->右击->管理->本地用户和组->用户),
之后就是在客户端远程组建配置工具中测试,通过后确定就OK了。
问题六:java怎么知道客户端连接服务器 java socket就可以完成
问题七:Android客户端怎么与服务器数据库连接? 客户端和服务端的数据库连接,是要服务器端做开发的,像javaee开发的服务端,然后客户端通过等连接到服务端,然后服务端通过一系列操作,吧数据返回给客户端,这样就完成了一次连接。
问题八:上网认证客户端无法连接认证服务器怎么办? 认证客户端常见问题解答
1.客户端一运行即消失的故障?
答:故障原因:如果用户的电脑设置了多个DNS或多个IP地址及系统里有system32exe这个进程,可能是木马进程序,有可能伪装成其它的名字的话,会导致以上故障。
故障解决办法如下:正确设置IP地址(只设置网络中心提供的地址)及DNS地址。
2.客户端提示“找不到合适的网卡”故障信息?
答:故障原因:系统没有正确获得网卡信息,或者网卡有问题。
故障解决办法如下:退出并重新打开客户端,如果问题依旧存在,请将网卡驱动程序卸载重装,如果还是不能解决问题,更换一张网卡。
3.客户端提示“目前系统工作环境与软件运行环境相冲突,软件不能正常运行,CODE=2”的故障信息?
答:故障原因:安装了多块网卡,与客户端运行的环境不符合要求。
故障解决办法:卸载或者禁用多余网卡,只保留一张网卡运行。
4.客户端提示“目前系统工作环境与软件运行环境相冲突,软件不能正常运行CODE=4”的故障信息?
答:故障原因:由于安装了代理软件,与客户端运行的环境不符合要求。
故障解决办法:关闭或卸载代理服务器以及一切可能成为代理服务器的软件。
5.客户端认证失败,没有任何的错误提示信息?
答:故障原因:WINXP启用了系统自带的8021X功能。
故障解决办法:双击网络连接图标,把属性里面的身份验证标签下“启用8021X身份认证”前的勾去掉。
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 javaioIOException;
import javaServerSocket;
import javaSocket;
public class Server {
Socket socket;
boolean flag = true;
public void createServer() {
try {
ServerSocket serverSocket = new ServerSocket(9090);
while (true) {
socket = serverSocketaccept();
if (flag) {
Systemoutprintln(有用户连上・・・);
Systemoutprintln(ip:+socketgetRemoteSocketAddress()toString()+ port:+socketgetPort());
flag = false;
}else{
Systemoutprintln(有用户连上・・・);
socketclose();
Systemoutprintln(关闭用户连接・・・);
}
}
} catch (IOException e) {
eprintStackTrace();
}
}
public static void main(String[] args) {
new Server()createServer();
}
}
问题十:socket客户端如何连接服务器端 import java;
import javalang;
import javaio;
public class MySocketServer
{
public static void main(String args[]) throws IOException
{
try{
ServerSocket myServer = new ServerSocket(8018);
Systemoutprintln(正在监听端口:+myServergetLocalPort());
Socket myClient = null;
boolean flag = true;
String InputMessage = null;
int c;
while(flag)
{
myClient = myServeraccept();
接收客户端的信息,如果不是Stop就继续监听,加个if判断
DataInputStream dataIn = new DataInputStream(myClientgetInputStream());
DataInputStream dataIn = new DataInputStream(new BufferedInputStream(myClientgetInputStream()));
OutputStream dataOut = myClientgetOutputStream();
while( (InputMessage = dataInreadLine()) != null )
{
if( InputMessageequals(stop))
{
flag = false;
break;
}
else
{
Systemoutprintln(从客户端接收到的信息是:+InputMessage);
输入:读取至 末尾-1结束,遇到回车'\n'结束:
while((c=Systeminread())!= -1)
{
dataOutwrite((byte)c);
if( c== '\n')
{
dataOutflush();
>>
0条评论