只能写一个循环,不停的检测socket有没有数据到达。根据读出的数据采取不同的措施。 下面是client的简单描述,希望有所帮助。 /* client thread */ in = socket.getInputStream(); out = socket.getOutputStream(); while (true) { int ch = in.read(); /* if lose connection */ if (ch == -1) break; else { // do something ....... // write sth to server out.write(...); } }
下面是client的简单描述,希望有所帮助。
/* client thread */
in = socket.getInputStream();
out = socket.getOutputStream();
while (true) {
int ch = in.read();
/* if lose connection */
if (ch == -1)
break;
else {
// do something
.......
// write sth to server
out.write(...);
}
}
我知道这样的逻辑,只是我不知道这种先鉴权后通讯的一般的程序是怎么设计的,按照我的思路是设定一个flag(鉴权变量),默认是0-非法,收到消息包,进行鉴别,如果为合法用户,把该字段设为 1-合法,接下来通讯的时候如果flag为1就进行消息处理,然后应答,然后断开连接,不知道一般的处理方法是什么?我的方法是不是最好的方法?
这个的算法是不安全的,即客户端可以伪造消息。应该用一个SessionID字段来唯一标识每个连接,更严格的做法是每次都进行验证。
我的算法就是每次连接都进行验证,就是一次完整的通讯过程是 (客户端)鉴权消息->应答合法->业务消息->应答(告知收到)->断开连接,消息是一条一条进行发送,没有完成一个连接,进行堵塞,直到设定的timeout时间,有问题吗?
if(flag == 0)
{
in.read(msgbytes) ;
#对消息进行鉴权判断;
#返回应答给客户端;
if (非法连接)
{
#断开连接;
}
else
flag =1;
}
else
{
#接收消息包;
#应答客户端下;
flag = 0;
#断开连接;
}
flag = 0;
if(flag == 0)
{
in.read(msgbytes) ;
#对消息进行鉴权判断;
#返回应答给客户端;
if (非法连接)
{
#断开连接;
}
else
flag =1;
}
else
{
#接收消息包;
#应答客户端下;
flag = 0;
#断开连接;
}