我写的一个server 一个client ,就是实现运行多个client,在一个client输入消息,然后消息发给服务器,服务器再回发给所有的client 代码如下,怎么实现不了呢,希望高手帮忙
server import java.net.*;
import java.io.*;
import java.util.*;
public class ServerSocketDemo
{
public static void main(String[] args) throws Exception
{
ArrayList list=new ArrayList();
ServerSocket ss=new ServerSocket(8189);
while(true)
{
Socket s=ss.accept();
list.add(s);
new ReverseDemo(s,list);
}
// ss.close();
}
}
class ReverseDemo extends Thread
{
BufferedReader in=null;
PrintWriter out=null;
String str="abc";
ArrayList list;
Socket s;
public ReverseDemo(Socket s,ArrayList list)
{
this.list=list;
this.s=s;
this.start();
}
public void run()
{
try
{
InputStream inStream = s.getInputStream();
OutputStream outStream = s.getOutputStream();
Scanner in = new Scanner(inStream);
PrintWriter out = new PrintWriter(outStream, true /* autoFlush */);
System.out.println(s.getInetAddress().getHostAddress()+" connected-------");
out.println("连接成功!");
Scanner a=new Scanner(System.in);
while(true)
{ str=in.nextLine();
// StringBuffer sb=new StringBuffer(str);
// str=sb.reverse().toString();
//System.out.println(str);
Iterator iterator=list.iterator();
while(iterator.hasNext())
{
PrintWriter o=new PrintWriter(
new BufferedWriter(
new OutputStreamWriter(
((Socket)(iterator.next())).getOutputStream())),true);
o.println(str);
}
}
// in.close();
// out.close();
// s.close();
}
catch (Exception ex)
{
ex.printStackTrace();
}
}
} client/**
@version 1.20 2004-08-03
@author Cay Horstmann
*/import java.io.*;
import java.net.*;
import java.util.*;/**
This program makes a socket connection to the atomic clock
in Boulder, Colorado, and prints the time that the
server sends.
*/
public class SocketTest
{
public static void main(String[] args)
{
try
{
Socket s = new Socket("localhost", 8189);
try
{
InputStream inStream = s.getInputStream();
OutputStream outStream=s.getOutputStream();
Scanner in = new Scanner(inStream);
Scanner a=new Scanner(System.in);
PrintWriter out = new PrintWriter(outStream, true /* autoFlush */); boolean done=false;
while (!done)
{ String line = in.nextLine();
System.out.println("服务器发送的信息为:"+line); if(a.hasNextLine())
{
String b=a.nextLine();
out.println(b);
if (b.trim().equals("BYE"))
done = true;
}
//else continue;
}
}
finally
{
s.close();
}
}
catch (IOException e)
{
e.printStackTrace();
}
}
}
server import java.net.*;
import java.io.*;
import java.util.*;
public class ServerSocketDemo
{
public static void main(String[] args) throws Exception
{
ArrayList list=new ArrayList();
ServerSocket ss=new ServerSocket(8189);
while(true)
{
Socket s=ss.accept();
list.add(s);
new ReverseDemo(s,list);
}
// ss.close();
}
}
class ReverseDemo extends Thread
{
BufferedReader in=null;
PrintWriter out=null;
String str="abc";
ArrayList list;
Socket s;
public ReverseDemo(Socket s,ArrayList list)
{
this.list=list;
this.s=s;
this.start();
}
public void run()
{
try
{
InputStream inStream = s.getInputStream();
OutputStream outStream = s.getOutputStream();
Scanner in = new Scanner(inStream);
PrintWriter out = new PrintWriter(outStream, true /* autoFlush */);
System.out.println(s.getInetAddress().getHostAddress()+" connected-------");
out.println("连接成功!");
Scanner a=new Scanner(System.in);
while(true)
{ str=in.nextLine();
// StringBuffer sb=new StringBuffer(str);
// str=sb.reverse().toString();
//System.out.println(str);
Iterator iterator=list.iterator();
while(iterator.hasNext())
{
PrintWriter o=new PrintWriter(
new BufferedWriter(
new OutputStreamWriter(
((Socket)(iterator.next())).getOutputStream())),true);
o.println(str);
}
}
// in.close();
// out.close();
// s.close();
}
catch (Exception ex)
{
ex.printStackTrace();
}
}
} client/**
@version 1.20 2004-08-03
@author Cay Horstmann
*/import java.io.*;
import java.net.*;
import java.util.*;/**
This program makes a socket connection to the atomic clock
in Boulder, Colorado, and prints the time that the
server sends.
*/
public class SocketTest
{
public static void main(String[] args)
{
try
{
Socket s = new Socket("localhost", 8189);
try
{
InputStream inStream = s.getInputStream();
OutputStream outStream=s.getOutputStream();
Scanner in = new Scanner(inStream);
Scanner a=new Scanner(System.in);
PrintWriter out = new PrintWriter(outStream, true /* autoFlush */); boolean done=false;
while (!done)
{ String line = in.nextLine();
System.out.println("服务器发送的信息为:"+line); if(a.hasNextLine())
{
String b=a.nextLine();
out.println(b);
if (b.trim().equals("BYE"))
done = true;
}
//else continue;
}
}
finally
{
s.close();
}
}
catch (IOException e)
{
e.printStackTrace();
}
}
}
解决方案 »
- 多线程,时间片轮换
- POI 取Excel字体的问题(欢迎大家进来交流一下,在线等,。。。。ps:领导下达了死命令 诶)
- java读取cpu和MAC
- 使用JSQLConnect.jar运行SQL语句,出现奇怪的问题,高手来看。
- Java中的接口可以进行类型转换和类型判断吗?
- 怎样在java中实现查看系统(非JVM)的内存(已用?空闲?),cpu使用情况(已用?空闲?).好急呀...
- 关于ant的build.xml的文件,谁能给一个比较复杂的例子啊!
- 高分求救:iText生成pdf文档时(做报表),如何解决中文问题?100分必送
- Jdbc简单问题,20分!!
- htmlparse抓取网页里面的想要信息
- java高手请进!如何用swing按钮调用外部类方法?
- JTree 节点图标问题
楼主【oceans0501】截止到2008-06-26 09:04:58的历史汇总数据(不包括此帖):
发帖数:0 发帖分:0
结贴数:0 结贴分:0
未结数:0 未结分:0
结贴率:-------------------结分率:-------------------
如何结贴请参考这里:http://topic.csdn.net/u/20080501/09/ef7ba1b3-6466-49f6-9d92-36fe6d471dd1.html
=====================================================================================================
server:import java.net.*;
import java.io.*;
import java.util.*;
public class ServerSocketDemo
{
public static void main(String[] args)
{
ArrayList list = new ArrayList();
ServerSocket ss = null;
try {
ss =new ServerSocket(8189);
while(true)
{
Socket s=ss.accept();
list.add(s);
new ReverseDemo(s,list);
}
}catch( Exception ex ) {
}
try {
ss.close();
}catch( Exception ex ) {
}
}
}
import java.net.*;
import java.io.*;
import java.util.*; public class ReverseDemo extends Thread
{
BufferedReader in=null;
PrintWriter out=null;
String str="abc";
ArrayList list;
Socket s;
public ReverseDemo(Socket s,ArrayList list)
{
this.list=list;
this.s=s;
this.start();
}
public void run()
{
try
{
InputStream inStream = s.getInputStream();
OutputStream outStream = s.getOutputStream();
PrintWriter out = new PrintWriter(outStream, true /* autoFlush */);
System.out.println(s.getInetAddress().getHostAddress()+" connected-------");
out.println("连接成功!"); byte[] buf = new byte[1024];
while(true)
{
int bytes_read = inStream.read( buf );
if( bytes_read < 0 ) {
break;
} else {
broadcast( buf, 0, bytes_read );
}
}
}
catch (Exception ex)
{
ex.printStackTrace();
}
finally {
list.remove( s );
}
}
void broadcast( byte[] b, int offset, int length ) {
for( int i = 0, n = list.size(); i < n; i++ ) {
Socket sock = (Socket) list.get( i );
if( sock != s ) {
try {
sock.getOutputStream().write( b, offset, length );
sock.getOutputStream().flush();
}catch( Exception ex ) {
}
}
}
}
} ======================================================================================================
client
/**
@version 1.20 2004-08-03
@author Cay Horstmann
*/import java.io.*;
import java.net.*;
import java.util.*;/**
This program makes a socket connection to the atomic clock
in Boulder, Colorado, and prints the time that the
server sends.
*/
public class SocketTest
{
private Socket sock_;
private byte[] name_;
public SocketTest( String host, int port, byte[] name ) throws Exception {
name_ = name;
sock_ = new Socket( host, port );
Thread th = new Thread( createMsgRecvRunnable() );
th.start();
byte[] b = new byte[ 1024 ];
int bytes_read = readMsg( b );
while( bytes_read > 0 ) {
sendMsg( b, 0, bytes_read );
bytes_read = readMsg( b );
}
}
private Runnable createMsgRecvRunnable() {
return new Runnable() {
public void run() {
try {
InputStream in = sock_.getInputStream();
byte[] buf = new byte[1024];
while( true ) {
int bytes_read = in.read( buf );
if( bytes_read < 0 ) {
break;
} else {
System.out.write( buf, 0, bytes_read );
}
}
}catch( Exception ex ) {
}
}
};
}
private int readMsg( byte[] b ) throws Exception {
return System.in.read( b );
}
private void sendMsg( byte[] msg, int offset, int length ) throws Exception {
sock_.getOutputStream().write( name_ );
sock_.getOutputStream().write( msg, offset, length );
sock_.getOutputStream().flush();
}
public static void main( String[] args ) {
try {
String name = null;
if( args.length > 0 ) {
name = args[0] + ":";
} else {
name = "unknown:";
}
SocketTest test = new SocketTest( "localhost", 8189, name.getBytes() );
}catch( Exception ex ) {
ex.printStackTrace();
}
}
}
server:import java.net.*;
import java.io.*;
import java.util.*;
public class ServerSocketDemo
{
public static void main(String[] args)
{
ArrayList list = new ArrayList();
ServerSocket ss = null;
try {
ss =new ServerSocket(8189);
while(true)
{
Socket s=ss.accept();
list.add(s);
new ReverseDemo(s,list);
}
}catch( Exception ex ) {
}
try {
ss.close();
}catch( Exception ex ) {
}
}
}
import java.net.*;
import java.io.*;
import java.util.*; public class ReverseDemo extends Thread
{
BufferedReader in=null;
PrintWriter out=null;
String str="abc";
ArrayList list;
Socket s;
public ReverseDemo(Socket s,ArrayList list)
{
this.list=list;
this.s=s;
this.start();
}
public void run()
{
try
{
InputStream inStream = s.getInputStream();
OutputStream outStream = s.getOutputStream();
PrintWriter out = new PrintWriter(outStream, true /* autoFlush */);
System.out.println(s.getInetAddress().getHostAddress()+" connected-------");
out.println("连接成功!"); byte[] buf = new byte[1024];
while(true)
{
int bytes_read = inStream.read( buf );
if( bytes_read < 0 ) {
break;
} else {
broadcast( buf, 0, bytes_read );
}
}
}
catch (Exception ex)
{
ex.printStackTrace();
}
finally {
list.remove( s );
}
}
void broadcast( byte[] b, int offset, int length ) {
for( int i = 0, n = list.size(); i < n; i++ ) {
Socket sock = (Socket) list.get( i );
if( sock != s ) {
try {
sock.getOutputStream().write( b, offset, length );
sock.getOutputStream().flush();
}catch( Exception ex ) {
}
}
}
}
} ===================================================================================
client:
/**
@version 1.20 2004-08-03
@author Cay Horstmann
*/import java.io.*;
import java.net.*;
import java.util.*;/**
This program makes a socket connection to the atomic clock
in Boulder, Colorado, and prints the time that the
server sends.
*/
public class SocketTest
{
private Socket sock_;
private byte[] name_;
public SocketTest( String host, int port, byte[] name ) throws Exception {
name_ = name;
sock_ = new Socket( host, port );
Thread th = new Thread( createMsgRecvRunnable() );
th.start();
byte[] b = new byte[ 1024 ];
int bytes_read = readMsg( b );
while( bytes_read > 0 ) {
sendMsg( b, 0, bytes_read );
bytes_read = readMsg( b );
}
}
private Runnable createMsgRecvRunnable() {
return new Runnable() {
public void run() {
try {
InputStream in = sock_.getInputStream();
byte[] buf = new byte[1024];
while( true ) {
int bytes_read = in.read( buf );
if( bytes_read < 0 ) {
break;
} else {
System.out.write( buf, 0, bytes_read );
}
}
}catch( Exception ex ) {
}
}
};
}
private int readMsg( byte[] b ) throws Exception {
return System.in.read( b );
}
private void sendMsg( byte[] msg, int offset, int length ) throws Exception {
sock_.getOutputStream().write( name_ );
sock_.getOutputStream().write( msg, offset, length );
sock_.getOutputStream().flush();
}
public static void main( String[] args ) {
try {
String name = null;
if( args.length > 0 ) {
name = args[0] + ":";
} else {
name = "unknown:";
}
SocketTest test = new SocketTest( "localhost", 8189, name.getBytes() );
}catch( Exception ex ) {
ex.printStackTrace();
}
}
}
不过强烈建议,LZ多看看马老师的 “基于SOCKET的聊天室的实现”。
服务端:
package houlei.chatRoom;import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Iterator;
import java.util.Vector;public class Server implements Runnable {
private Thread instance;
private boolean running=false;
private Socket socket;
private Vector set;
public Server(Socket socket, Vector set) {
this.socket=socket;this.set=set;
} public void run() {
while(running){
try {
InputStream in = socket.getInputStream();
if(in.available()>0){
BufferedReader br = new BufferedReader(new InputStreamReader(in));
String line = br.readLine();
Iterator itr = set.iterator();
while(itr.hasNext()){
Server s = (Server)itr.next();
if(this.equals(s)==false)
s.sendLine(line);
}
}
Thread.sleep(10);
} catch (IOException e) {
stop();
} catch (InterruptedException e) {
}
}
}
private void sendLine(String line) throws IOException {
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
bw.write(line);
bw.newLine();
bw.flush();
} public static void main(String[] args) throws IOException {
int port = 8189;
ServerSocket ss = new ServerSocket(port);
Vector set = new Vector();
while(true){
Server s = new Server(ss.accept(),set);
set.add(s);
s.start();
}
} private void start() {
if(running)return;
running=true;
instance=new Thread(this);
instance.start();
}
private void stop(){
if(running){
running=false;
set.remove(this);
if(socket!=null && socket.isConnected()){
try {
socket.close();
} catch (IOException e) {
}
}
instance.interrupt();
}
}
}客户端:
package houlei.chatRoom;import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.Socket;public class Client { public static void main(String[] args) throws Exception {
String serverIp = "127.0.0.1";
int serverPort = 8189;
Socket s = new Socket(serverIp,serverPort);
InputStream input = s.getInputStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(input));
BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
InputStream in = System.in;
while(s.isConnected()){
if(in.available()>0){
BufferedReader br = new BufferedReader(new InputStreamReader(in));
String line = br.readLine();
writer.write(line);
writer.newLine();
writer.flush();
}
if(input.available()>0){
String line = reader.readLine();
System.out.println(line);
}
Thread.sleep(10);
}
}}