这是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并处理它。但是,这种方法对于真实服务器似乎效率低下。