可以肯定需要服务器,你可以考虑服务器启动后发IP邮件到邮箱,让客户端自动POP邮件取IP就可以了,谁都可以作为服务器,这样的缺点是GPRS网卡禁止移动或者掉线后重连有问题.只用JS不好办,数据可能不能保证一致性.

解决方案 »

  1.   

    我觉得用C#挺不错的,JS的话,可能不太好,很多功能都比较吃力
    如果不用服务器,只是手动填入,那样的话,不太方便,只适合于那些事先联系好的人玩
      

  2.   

    to:gjd111686(数字金刚) 
    其实这样的程序想来想去,可以说每个机器都能起到服务器的作用,只是谁是第一个主动连接的就批准谁为服务器,如果这个连接断开了,那么另外一个[第二个主动连接者]就为服务器我没有说只用js开发
    可以用java apple 或其他的语言写一个sock程序,,只是能用js调用而已对于断口,用80的问题多,那么就不能在换了吗?况且这个程序也不用什么web服务器!
    如果其他断口也受防火墙限制那么,kele8等一些在线游戏,他是怎么做到的呢??
      

  3.   

    用JAVA实现并发SOCKET通信  如果以前做过C的SOCKET编程,那么这一段对你来说将不是什么难事。利用JAVA的多线程机制我们可以非常方便的实现并发服务。  每当我们知道服务器主程序创建一个新的套接字连接(即成功地调用了accept()方法)的时候,就启动一个新的线程来负责本服务器和该客户之间的连接,主程序将返回并等待下一个连接。为了实现这个方案,本服务器主循环应该采用如下形式:  while(true)
      { Socket newjoin=s.accept();
      Tread t=new ThreadedChatHandle(newjoin);
      t.start();
      }  ThreadedChatHandle类是从Thread类衍生出的处理聊天过程的子类,它的run()方法包括了服务器和客户的通信循环——判断客户的请求(例如登录、发言、刷新在线列表),处理发言数据,发送聊天信息等等。下面是一个服务器程序的例子,可以帮助初学者尽快理解。  import java.io.*;
      import java.net.*;
      public class ChatServer
      { public static void main(String[] args)
      { int I=1;
      try
      {ServerSocket s=new ServerSocket(8080);
      /*创建一个监视8080端口的服务器套接字,如果需要,你可以改成80端口*/
      for(;;)
      { Socket newjoin=s.accept();
      /*等待一个连接。如果这个连接没有被创建,本方法阻塞当前线程。返回值是一个
    Socket对象,服务器程序利用这个对象可以与连接的客户通信。*/
       System.out.println(“新连接”+i);
       new ThreadedChatHandle(newjoin,i).start();
      /* ThreadedChatHandle(Socket theS,int c)是我们自己定义的聊天服务类,这个
    类在后边我们有进一步描述*/
           i++;
      }
      }
      catch(Exception e)
      { System.out.println(e);
      }
      }
      ……
      }  多进程(线程)并发服务的一个关键问题是,如何实现进程(线程)间通信。每个客户的发言(包括表情和动作等选项)都需要放在一个公共的地方,让所有的输出线程都能够获得它。解决的方法有很多,比如说放在数据库里,放在大家都有权限的dat文件里,或直接用管道实现进程间通信。其中,对一个聊天室服务器来说,第一种方法是最傻的,太消耗系统资源,而且使程序执行效率变慢,可能出错环节增多。而使用管道通信的方式,把所有发言数据都保存在内存里,不但可以获得最高的执行效率,安全的执行过程,也不用考虑线程同步的问题。不要以为所有的发言数据会很多,其实服务器端只要保存最后100句就已经很了不起了,不是吗?  JAVA里关于管道的API有:  ●Java.io.PipedInputStream  PipldInputStream():  创建新的管道输入流,且它没有关联一个管道输出流。  PipldInputStream(PipldOutputStream out):  创建新的管道输入流,且从管道输出流out中读取数据。  connect(PipldOutputStream out):  关联一个管道输出流,且这个流读取数据。  ●Java.io.PipedOutputStream  PipldOutputStream():  创建新的管道输出流,且它没有关联一个管道输入流。  PipldOutputStream(PipldInputStream in):  创建新的管道输出流,并输出数据到in。  connect(PipldInputStream in):  关联一个管道输入流,并输入数据到in。
      

  4.   

    没有服务器,当然可以,
    我说的意思是开发一个低级的sock
    这个只是一个 基本 的dll,,,从而能用js调用并开发!
    可能在后期开发中会用js判断来实现
      

  5.   

    其实这个dll即是 服务器 又是客户断
      

  6.   

    Socket也需要有服务器侦听啊,只是你的服务器和客户端放到了一起.肯定得处理.
      

  7.   

    to:  gjd111686(数字金刚)
    都理解错了,没有运行程序时并不是把自己做成服务器
    当启动动,经过判断该由哪个机器做服务器[]然后就可以然后就有服务器侦听了谁能写一个dll看看???
    偶不会所以,才放高分求救啊!!!!
    upupupuupupupu
      

  8.   

    用xml模拟无刷新,不能起到sock的作用
      

  9.   

    回复人: redsleaf(红叶(漫天飞)) ( ) 信誉:100  2004-07-06 13:33:00  得分: 0  
     
       to:  gjd111686(数字金刚)
    都理解错了,没有运行程序时并不是把自己做成服务器
    当启动动,经过判断该由哪个机器做服务器[]然后就可以然后就有服务器侦听了谁能写一个dll看看???
    偶不会所以,才放高分求救啊!!!!upupupuupupupu 
    --------------------------
    我还是没理解:“经过判断该由哪个机器做服务器”那么是谁判断?如果没有服务器,公说公有理,婆说婆有理,谁做服务器呢?你的意思大概和QQ的道理一样吧~~~集中管理登陆的用户IP,而用户之间的通信是用户之间的事情,不再通过主服务器。
      

  10.   

    to mikespook(我需要一份工作)
     ok你的理解的和我想的一样,
     做一个比较好理解的说明吧!1
     这个程序的工作就和小时候玩游戏一样,
     几个人在一起玩,那么谁当头呢!这样就要大家一起来推荐,那么最后呢!结果证明往往谁最先提出的“那么谁当头呢!”谁就有可能当上头[当然在网络上还会有其他因数、比如网路速度等],如果这个人退役了,那么就要竞争了,