//这是一个java的server, client连接此server后发送一条语句:"LOGIN name", server收到此语句后回一句"WElCOME ..."
//当用户"a"发送一句"DRAW x1 y1 x2 y2 color"语句后, server向所有连接上词server socket的用户群发
//"DRAWMSG a x1 y1 x2 y2 color". 现在已经可以实现多用户连接上服务器并单独交换信息. 请问怎么实现server向多用户群发消息.
//谢谢
import java.io.*;
import java.net.*;
import java.util.*;/**
* <p>Title: Network Programming - Client</p>
*
* <p>Description: WhiteBoard client program that copes with Logic server</p>
*
* <p>Copyright: Copyright (c) os2008sp2</p>
*
* <p>Company: Unisa Corp</p>
*
* @author SHI, Bishuo
*
* @version 1.0
*/public class NetworkEchoServer {
public static void main(String[] args)
{
int i=0;
try
{
ServerSocket listener = new ServerSocket(Integer.parseInt(args[0]));
Socket server;
PrintWriter op;
Vector clients = new Vector();
while(true)
{
server = listener.accept();
op=new PrintWriter(server.getOutputStream());
op.println("WELCOME Thank you for using whiteboard system");
op.flush();
Client client= new Client(server);
clients.addElement(client);
Thread t = new Thread(client);
t.start();
}
} catch (IOException ioe) {
System.out.println("IOException on socket listen: " + ioe);
ioe.printStackTrace();
}
}
}class Client implements Runnable {
private Socket socket;
private String line;
String name;
Client(Socket socket) {
this.socket=socket;
}
public void run () {
try {
// Get input from the client
BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
PrintStream out = new PrintStream(socket.getOutputStream());
while((line = in.readLine()) != null && !line.equals(".")) {
if(line.startsWith("LOGIN"))
{
StringTokenizer token = new StringTokenizer(line," ");
token.nextToken();
name=token.nextToken();
out.println("LOGIN_OK"+name);
out.flush();
}
if(line.startsWith("DRAW"))
{
StringTokenizer token = new StringTokenizer(line," ");
token.nextToken();
line="DRAWMSG "+name+" "+token.nextToken()+" "+token.nextToken()+" "+
token.nextToken()+" "+token.nextToken()+" "+token.nextToken();
out.println(line);
out.flush();
}
//out.println("From server: " + line);
}
socket.close();
} catch (IOException ioe) {
System.out.println("IOException on socket listen: " + ioe);
ioe.printStackTrace();
}
}
}
//当用户"a"发送一句"DRAW x1 y1 x2 y2 color"语句后, server向所有连接上词server socket的用户群发
//"DRAWMSG a x1 y1 x2 y2 color". 现在已经可以实现多用户连接上服务器并单独交换信息. 请问怎么实现server向多用户群发消息.
//谢谢
import java.io.*;
import java.net.*;
import java.util.*;/**
* <p>Title: Network Programming - Client</p>
*
* <p>Description: WhiteBoard client program that copes with Logic server</p>
*
* <p>Copyright: Copyright (c) os2008sp2</p>
*
* <p>Company: Unisa Corp</p>
*
* @author SHI, Bishuo
*
* @version 1.0
*/public class NetworkEchoServer {
public static void main(String[] args)
{
int i=0;
try
{
ServerSocket listener = new ServerSocket(Integer.parseInt(args[0]));
Socket server;
PrintWriter op;
Vector clients = new Vector();
while(true)
{
server = listener.accept();
op=new PrintWriter(server.getOutputStream());
op.println("WELCOME Thank you for using whiteboard system");
op.flush();
Client client= new Client(server);
clients.addElement(client);
Thread t = new Thread(client);
t.start();
}
} catch (IOException ioe) {
System.out.println("IOException on socket listen: " + ioe);
ioe.printStackTrace();
}
}
}class Client implements Runnable {
private Socket socket;
private String line;
String name;
Client(Socket socket) {
this.socket=socket;
}
public void run () {
try {
// Get input from the client
BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
PrintStream out = new PrintStream(socket.getOutputStream());
while((line = in.readLine()) != null && !line.equals(".")) {
if(line.startsWith("LOGIN"))
{
StringTokenizer token = new StringTokenizer(line," ");
token.nextToken();
name=token.nextToken();
out.println("LOGIN_OK"+name);
out.flush();
}
if(line.startsWith("DRAW"))
{
StringTokenizer token = new StringTokenizer(line," ");
token.nextToken();
line="DRAWMSG "+name+" "+token.nextToken()+" "+token.nextToken()+" "+
token.nextToken()+" "+token.nextToken()+" "+token.nextToken();
out.println(line);
out.flush();
}
//out.println("From server: " + line);
}
socket.close();
} catch (IOException ioe) {
System.out.println("IOException on socket listen: " + ioe);
ioe.printStackTrace();
}
}
}
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货