在java中通过TCP发送或接收通知

时间:2015-04-26 09:19:14

标签: java sockets tcp server

这是Client程序的主要方法,它为OutputStream写入服务器,然后等待服务器发回响应。

public static void main(String[] args) throws IOException
{
    Scanner input = new Scanner(System.in);
    InetAddress server_addr = InetAddress.getByName(AUCTIONSERVER_IP_ADDRESS);
    Socket client = new Socket(server_addr, BUYER_PORT);
    user = "";
    OutputStream out = client.getOutputStream();
    InputStream in = client.getInputStream();
    while (true)
    {
        String a = input.nextLine(); //read command from user
        out.write(a.getBytes());     //send the command to server
        byte[] data = new byte[10000];
        in.read(data, 0, 10000);     //receive the output
    }
}

服务器程序可以同时接受多个买家并启动下面的每个线程

每个Thread服务器的run()方法创建

public void run()
{
    try
    {
            OutputStream out = this.socket.getOutputStream();
            InputStream in = this.socket.getInputStream();

            while (true)
            {
                byte[] data = new byte[100];
                in.read(data, 0, 100); // do something with the data
                out.write(result.getBytes()); // return the output to Buyer client
            }           
    } catch (IOException e)
    {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}

客户端程序将向OutputStream添加一些内容,服务器线程将读取它(每个客户端将由1个服务器线程处理)然后将某些内容发送回客户端。来自客户端的每次写入将与来自服务器的一次读取匹配,反之亦然。但是,当有一条特殊的消息从服务器发送到客户端时(在前面提到的循环之外),客户端无法在不弄乱循环的情况下接收它。此外,它将被客户端程序中的input.nextLine()停止,因此除非他发送任何命令,否则客户端将不会收到通知。有人可以建议一种有效的方法来实现这个问题的实时通知吗?

我正在考虑让服务器向每个线程发送一个OutputStream,实际拥有该通知的人将收到该消息;其他人会得到类似" -1"的东西。所有客户端程序将在开始时检查inputStream并处理它。但是,这种方法对于真实服务器似乎效率低下。

0 个答案:

没有答案