老师留了一个作业:Java实现多线程通讯。客户端、服务端两个程序课实现自由对话,类似聊天功能,一个服务器课对多个客户端。
要求每天记录研发日志。我的疑问:
   聊天功能不都是客户端对客户端吗?怎么会有服务端?
   涉及到服务端是不是要用socket?如果不是用什么呢?
   怎么实现多线程呢?在线程方法里面写读取信息吗?
   以及,这个作业的目的是要掌握线程呢?还是通讯技术呢?
   哎,哪儿哪儿都晕。。非常急,郁闷了一下午也没有头绪,希望大家帮我一下~~~
说的尽可能详细些好吧。
小女不胜感激~~~~我分不多了,大家将就一下吧。不好意思了

解决方案 »

  1.   


    怎么会没有服务器呢,晕。所以的消息都是先到服务器再到客户端的
    package com.thread.www;public class FirstThread
    {
    public static void main(String[] args)
    {
    First f = new First();
    f.start();
    //Thread t = new Thread(f);
    //t.start();
    for(int i=0; i<1000; i++)
    {
    System.out.println("main thread way=============="+i);
    }
    }
    }
    /*
     * 写一个线程类的时候最好是实现Runnable接口
     * 这样的话这个类还可以继承其他的类,实现其他的接口
     */
    //class First implements Runnable
    class First extends Thread
    {
    public void run()
    {
    for(int i=0; i<1000; i++)
    {
    System.out.println("other thread way "+i);
    }
    }
    }
    这简单的多线程 至于服务器是用什么协议 是tcp/ip还是icp/ip呢   这个你可以问下腾讯  
    因为聊天的协议一般都是用icp/ip协议,但qq有时候有这样的情况,昨天登录QQ没有消息,但今天你登录QQ有可能时间在昨天登录前的信息,这有点想不通
      

  2.   

    以前写过一个类似的东西,需要的话,可以发你[email protected]
    个人理解是这样的:
    聊天功能虽然是客户端对客户端,但这两者直接进行通讯需要借助服务端,就是说先起一个服务端,然后可以开多个客户端,各个客户端之间就可以借助服务端通讯了。
    需要涉及socket。
    以多线程为主。提供个思路:
    1.首先,实现最简单的单个客户端链接服务端。
    2.从单个客户端可以发送消息到服务端,并且在服务端可以看到。
    3.从服务端可以发送消息到客户端。
    4.可以连多个客户端到服务端,并且服务端都可以看到客户端所发信息。
    5.各个客户端可以看到其他客户端发送的信息。
    6.修复一些Bug,个人理解基本上就是这样,本人也好久不玩多线程以及Socket了。
      

  3.   

    这个小程序我在一本书上看到过,呵呵,但是懒了一下自己没实践。聊天程序都是要服务器端的,就算没有一个明显的服务器端,也一定是有一方是被呼叫,而被呼叫方就相当于服务器端,1楼的最后的疑问,QQ应该是将这个消息存在了它的服务器上,等到再次上线的时候再发给本人。利用到的是Socket,服务器端用ServerSocket类建立一个ServerSocket对象,然后用一个包含accept的死循环来接收客户端的Socket对象;客户端建立Socket类对象来与服务器端连接。
    加入多线程的部分,可以在服务器端用一个List把多个ServerSocket对象装起来,客户端没什么变化。
    详细可以看看java说明文档的java.net包里的ServerSocket类和Socket类的用法。再复杂一些的可以加入用户信息的记录啊,私聊的功能啊,增加容错性啊,广播的功能啊(当然,这个功能还有更“专业”的类来实现),等等。