与一次read/write的原理一样。可以在信息中加一个标识字段,比如验证请求为1,其它请求为2,服务端对此标识位做判断,如果是1则返回验证结果,如果是2则做相应处理(返回应答,断开连接)

解决方案 »

  1.   

    由于有很多消息类型,我无法预知消息包的大小,所以没法定义bytes的大小,我怎么接收一个未知大小的bytes消息包?谢谢。
      

  2.   

    我知道这样的逻辑,只是我不知道这种先鉴权后通讯的一般的程序是怎么设计的,按照我的思路是设定一个flag(鉴权变量),默认是0-非法,收到消息包,进行鉴别,如果为合法用户,把该字段设为 1-合法,接下来通讯的时候如果flag为1就进行消息处理,然后应答,然后断开连接,不知道一般的处理方法是什么?我的方法是不是最好的方法?
      

  3.   

    只能写一个循环,不停的检测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(...);
      }
    }
      

  4.   

    回复人: birditren2001(陪你倒数) ( ) 信誉:91  2003-11-20 13:19:00  得分:0 
     
     
      我知道这样的逻辑,只是我不知道这种先鉴权后通讯的一般的程序是怎么设计的,按照我的思路是设定一个flag(鉴权变量),默认是0-非法,收到消息包,进行鉴别,如果为合法用户,把该字段设为 1-合法,接下来通讯的时候如果flag为1就进行消息处理,然后应答,然后断开连接,不知道一般的处理方法是什么?我的方法是不是最好的方法?
      
     
    这个的算法是不安全的,即客户端可以伪造消息。应该用一个SessionID字段来唯一标识每个连接,更严格的做法是每次都进行验证。
      

  5.   

    TO 楼上的:
       我的算法就是每次连接都进行验证,就是一次完整的通讯过程是  (客户端)鉴权消息->应答合法->业务消息->应答(告知收到)->断开连接,消息是一条一条进行发送,没有完成一个连接,进行堵塞,直到设定的timeout时间,有问题吗?
      

  6.   

    flag = 0;
    if(flag == 0)
    {
       in.read(msgbytes) ;
       #对消息进行鉴权判断;
       #返回应答给客户端;
       if (非法连接)
      {
         #断开连接;
       } 
       else
       flag =1;
    }
    else
    {
       #接收消息包;
       #应答客户端下;
       flag = 0;
       #断开连接;
     }
      

  7.   

    flag=0表示还没有进行登陆验证,flag=1表示已经验证合法,这个逻辑可行吗?
      

  8.   

    顶一下,各位给我看看这个逻辑行不行啊,还有如果是一下子循环发几万条数据过来的话连接就不用断开了,不知道怎么实现?
    flag = 0;
    if(flag == 0)
    {
       in.read(msgbytes) ;
       #对消息进行鉴权判断;
       #返回应答给客户端;
       if (非法连接)
      {
         #断开连接;
       } 
       else
       flag =1;
    }
    else
    {
       #接收消息包;
       #应答客户端下;
       flag = 0;
       #断开连接;
     }
      

  9.   

    楼上的,MSN是多少,我第一次做,想和你交流一下。
      

  10.   

    对了,我不清楚java的socket编程有没有所谓的阻塞和非阻塞模式,里面涉及到进程之间的通信(unix下的c),上面写的仅供楼主参考。