可以啊!
我以前做过类似的程序~~
在同一台机器上可以同时启动一个server,一个client的啊。

解决方案 »

  1.   


    一台机器上当然可以同时启动一个server和一个client的但我想做的是,控制该client或server在同一时刻只启动一个,简单的说,就是一个应用程序的单模式问题,应该是可以的,好像应用程序启动后写一下注册表,然后运行同一个应用程序时判断注册表,然后做一些控制,好像是这样,但我没做过,不知道高手们能不能给点demo代码,谢谢大家了!
      

  2.   

    : jh20001(十七郎)
    我的意思是对于client只启一个,server也只启一个,不是只启两者中的一个。
    : zhaoao5958(不会游泳的鱼) 
    怎样解决啊,请不吝赐教。感谢大家的关注和发言!
      

  3.   

    当然可以啊,为什么不可以呢。使用回环IP 127.0.0.1就可以了,当然不要有端口冲突。
    回环ip本来就是经常用来单机测试的。
      

  4.   

    : mercury1231(呵呵,其实我什么都不懂) 
    能不能说清楚啊?什么是回环IP啊?怎么用呢?谢谢了,真的很感谢
      

  5.   

    把你想做的东西说清楚一点吧,
    (我的意思是对于client只启一个,server也只启一个,不是只启两者中的一个。)你又说不是本机通讯,搞不明白你想做的是什么。
      

  6.   

    呵呵,楼主是不是这个意思:假如在本机已经开启了一个C或S程序。如果再重新运行这个C或S程序就应该启动不了了。是这个意思吗?
      

  7.   

    我的意思是这样的:
    举一个例子,我们运行ie,启动一次会打开一个ie窗口,启动两次会打开两个ie窗口,三次会有三个,依次类推;但是如果我们运行ultraedit,执行一次ultraedit.exe会运行一个ultraedit.exe,执行两次ultraedit.exe也只会打开同样的那个ultraedit.exe,三次也是一样,也只会打开同样的那个ultraedit.exe,依次类推。
    我想要做的事情,就是使我的client、server都能像ultraedit.exe一样,这样进行单线程或是单模式通讯,不知道这样说对不对?
    不知道我说得清不清楚,可能我有些概念还不是很清楚,所以表达起来有些困难,还请高手指教。
      

  8.   

    我觉得这应该不是问题吧,客户端的个数可以通过server端来控制ServerScoket(int port,int backlog),
    server端程序跑了一个之后,第二个在同一台机器上应该是跑不起来的。具体原因我也不太清楚,但我的一个server端程序在服务器跑起来之后,在跑一个就跑不起来。我估计是端口会有冲突,
    我给你我的code,你再分析一下吧。public class ControlMain{public static boolean tmpFlag=false;
    public synchronized static void SetSystemExit(){
    tmpFlag=true;
    }
    public synchronized static boolean SystemExit(){
    return tmpFlag;
    }public static void main(String args[]){
    System.out.println("系统开始运行了");
    // MsgFormat  msgFormat=new MsgFormat();
    // Queue userQueue = new Queue();
    Queue listenQueue=new Queue();
    Queue cortrolQueue = new Queue();
    /* StartCortrolQueue startCortrolQueue = new StartCortrolQueue(userQueue); // 初始化监控队列
    startCortrolQueue.setDaemon(true);
    startCortrolQueue.start();
    System.out.println("ListenDaemon");
    */ CheckUserLogin  checkUserLogin = new CheckUserLogin();      // 下面三行是启动检验用户合法性线程
    checkUserLogin.setDaemon(true);
    checkUserLogin.start();
    ListenDaemon listener=new ListenDaemon(listenQueue);//下面三行是启动消息监听线程,并且设置成为daemon
            listener.setDaemon(true);
    listener.start();
    System.out.println("ListenCortrolDaemon");
    ListenCortrolDaemon listenerCortrol=new ListenCortrolDaemon(cortrolQueue);//下面三行是启动监控订阅表监听线程,并且设置成为daemon
            listenerCortrol.setDaemon(true);
    listenerCortrol.start();
    MainLogicThread mainLogicThread=new MainLogicThread(listenQueue,cortrolQueue);//下面三行是启动逻辑处理线程,并且设置成为daemon
            mainLogicThread.setDaemon(true);
    mainLogicThread.start();
    System.out.println("系统初始化结束了");
    while (!SystemExit()){
    try{
    Thread.sleep(500);
    }catch(Exception de){
    }
    }//end of while
    try{
    Thread.sleep(10000);
    }catch(Exception de){
    }
    System.out.println("系统退出了"); }//end of main
    }//end of class CortrolMain