ITPUB??ì3
ITPUB论坛 » Java入门与认证版 » 百分求解一程序(JAVA网络)


标题: 百分求解一程序(JAVA网络)
离线 duxiaochu1972
资深会员



精华贴数 0
个人空间 0
技术积分 6346 (191)
社区积分 4 (17740)
注册日期 2006-7-13
论坛徽章:14
开发板块每日发贴之星开发板块每日发贴之星开发板块每日发贴之星开发板块每日发贴之星开发板块每日发贴之星开发板块每日发贴之星
开发板块每日发贴之星开发板块每日发贴之星开发板块每日发贴之星开发板块每日发贴之星开发板块每日发贴之星生肖徽章2007版:鼠

发表于 2008-5-14 09:03 
百分求解一程序(JAVA网络)

各位高手,现在想求一程序,就是实现服务器和客户端互相通信,既一个服务器可以有多个客户端连接,服务可以发消息给客户端,客户端也可以发消息给服务器,并且可以互相收到对方发送的消息。
先谢谢啦,问题解决立刻解贴!


只看该作者    顶部
离线 dotnetworker
一般会员



精华贴数 0
个人空间 0
技术积分 2496 (596)
社区积分 0 (1435987)
注册日期 2007-6-21
论坛徽章:32
开发板块每日发贴之星开发板块每日发贴之星生肖徽章2007版:鼠生肖徽章2007版:鼠生肖徽章2007版:鼠生肖徽章2007版:鼠
生肖徽章2007版:鼠生肖徽章2007版:鼠生肖徽章2007版:鼠生肖徽章2007版:鼠生肖徽章2007版:鼠生肖徽章2007版:鼠

发表于 2008-5-14 09:03 
服务端代码:

import java.io.*;
import java.net.*;
import java.util.*;

public class ChatServer {
boolean started = false;
ServerSocket ss = null;

List <Client> clients = new ArrayList <Client>();

public static void main(String[] args) {
new ChatServer().start();
}

public void start() {
try {
ss = new ServerSocket(8888);
started = true;
} catch (BindException e) {
System.out.println("端口使用中....");
System.out.println("请关掉相关程序并重新运行服务器!");
System.exit(0);
} catch (IOException e) {
e.printStackTrace();
}

try {

while(started) {
Socket s = ss.accept();
Client c = new Client(s);
System.out.println("a client connected!");
new Thread(c).start();
clients.add(c);
//dis.close();
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
ss.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}

class Client implements Runnable {
private Socket s;
private DataInputStream dis = null;
private DataOutputStream dos = null;
private boolean bConnected = false;

public Client(Socket s) {
this.s = s;
try {
dis = new DataInputStream(s.getInputStream());
dos = new DataOutputStream(s.getOutputStream());
bConnected = true;
} catch (IOException e) {
e.printStackTrace();
}
}

public void send(String str) {
try {
dos.writeUTF(str);
} catch (IOException e) {
clients.remove(this);
System.out.println("对方退出了!我从List里面去掉了!");
//e.printStackTrace();
}
}

public void run() {
try {
while(bConnected) {
String str = dis.readUTF();
System.out.println(str);
for(int i=0; i <clients.size(); i++) {
Client c = clients.get(i);
c.send(str);
//System.out.println(" a string send !");
}
/*
for(Iterator <Client> it = clients.iterator(); it.hasNext(); ) {
Client c = it.next();
c.send(str);
}
*/
/*
Iterator <Client> it = clients.iterator();
while(it.hasNext()) {
Client c = it.next();
c.send(str);
}
*/
}
} catch (EOFException e) {
System.out.println("Client closed!");
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if(dis != null) dis.close();
if(dos != null) dos.close();
if(s != null)  {
s.close();
//s = null;
}

} catch (IOException e1) {
e1.printStackTrace();
}


}
}

}
}

客户端代码:

import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.net.*;

public class ChatClient extends Frame {
Socket s = null;
DataOutputStream dos = null;
DataInputStream dis = null;
private boolean bConnected = false;

TextField tfTxt = new TextField();

TextArea taContent = new TextArea();

Thread tRecv = new Thread(new RecvThread());  

public static void main(String[] args) {
new ChatClient().launchFrame();  
}

public void launchFrame() {
setLocation(400, 300);
this.setSize(300, 300);
add(tfTxt, BorderLayout.SOUTH);
add(taContent, BorderLayout.NORTH);
pack();
this.addWindowListener(new WindowAdapter() {

@Override
public void windowClosing(WindowEvent arg0) {
disconnect();
System.exit(0);
}

});
tfTxt.addActionListener(new TFListener());
setVisible(true);
connect();

tRecv.start();
}

public void connect() {
try {
s = new Socket("192.168.1.110", 8888);
dos = new DataOutputStream(s.getOutputStream());
dis = new DataInputStream(s.getInputStream());
System.out.println("connected!");
bConnected = true;
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}

}

public void disconnect() {
try {
dos.close();
dis.close();
s.close();
} catch (IOException e) {
e.printStackTrace();
}

/*
try {
bConnected = false;
tRecv.join();
} catch(InterruptedException e) {
e.printStackTrace();
} finally {
try {
dos.close();
dis.close();
s.close();
} catch (IOException e) {
e.printStackTrace();
}
}
*/
}

private class TFListener implements ActionListener {

public void actionPerformed(ActionEvent e) {
String str = "李成龙:" + tfTxt.getText().trim();
//taContent.setText(str);
tfTxt.setText("");

try {
//System.out.println(s);
dos.writeUTF(str);
dos.flush();
//dos.close();
} catch (IOException e1) {
e1.printStackTrace();
}

}

}

private class RecvThread implements Runnable {

public void run() {
try {
while(bConnected) {
String str = dis.readUTF();
//System.out.println(str);
taContent.setText(taContent.getText() + str + '
');
}
} catch (SocketException e) {
System.out.println("退出了,bye!");
} catch (EOFException e) {
System.out.println("推出了,bye - bye!");
} catch (IOException e) {
e.printStackTrace();
}  

}

}
}


只看该作者    顶部
离线 dotnetworker
一般会员



精华贴数 0
个人空间 0
技术积分 2496 (596)
社区积分 0 (1435987)
注册日期 2007-6-21
论坛徽章:32
开发板块每日发贴之星开发板块每日发贴之星生肖徽章2007版:鼠生肖徽章2007版:鼠生肖徽章2007版:鼠生肖徽章2007版:鼠
生肖徽章2007版:鼠生肖徽章2007版:鼠生肖徽章2007版:鼠生肖徽章2007版:鼠生肖徽章2007版:鼠生肖徽章2007版:鼠

发表于 2008-5-14 09:04 
格式不对,自己用eclipse调整一下就行了


只看该作者    顶部
离线 duxiaochu1972
资深会员



精华贴数 0
个人空间 0
技术积分 6346 (191)
社区积分 4 (17740)
注册日期 2006-7-13
论坛徽章:14
开发板块每日发贴之星开发板块每日发贴之星开发板块每日发贴之星开发板块每日发贴之星开发板块每日发贴之星开发板块每日发贴之星
开发板块每日发贴之星开发板块每日发贴之星开发板块每日发贴之星开发板块每日发贴之星开发板块每日发贴之星生肖徽章2007版:鼠

发表于 2008-5-14 09:04 
先谢谢了,不过不对的,你这样发出去的消息客户端可以收到服务器也可以收到的?
还有服务器不可以给客房端发消息的。麻烦你在修改一下吧,我是新手,真的不太懂。


只看该作者    顶部
离线 不杀生的狼
会员


精华贴数 0
个人空间 0
技术积分 355 (5251)
社区积分 4 (18252)
注册日期 2007-8-6
论坛徽章:5
授权会员2008年新春纪念徽章生肖徽章2007版:鸡开发板块每日发贴之星ITPUB新首页上线纪念徽章 
      

发表于 2008-5-17 12:53 
我这里有,看下符合你的要求不,以前写的。


只看该作者    顶部
离线 不杀生的狼
会员


精华贴数 0
个人空间 0
技术积分 355 (5251)
社区积分 4 (18252)
注册日期 2007-8-6
论坛徽章:5
授权会员2008年新春纪念徽章生肖徽章2007版:鸡开发板块每日发贴之星ITPUB新首页上线纪念徽章 
      

发表于 2008-5-17 12:53 
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.FileInputStream;
import java.io.IOException;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.Properties;

public class Client extends Frame{
        Socket s = null;
        /**
         *
         */
        private static final long serialVersionUID = 1L;
        private TextField text;
        private TextArea ta;
        DataOutputStream dos = null;
        DataInputStream dis = null;
        Client(){
                getGUI();
        }

        private void getGUI(){
                text = new TextField();
                ta = new TextArea();
                String welcome = "welcome you be along chat System";
                //Font f=new Font(welcome,0,0);
                ta.setText(welcome);
                ta.setEditable(false);
                setTitle("Chat System Client");
                add(text,BorderLayout.NORTH);
                add(ta,BorderLayout.EAST);
                pack();
                setLocation(400, 400);
                this.addWindowListener(new WindowAdapter(){
                        @Override
                        public void windowClosing(WindowEvent arg0) {
                                System.exit(0);
                        }               
                });
                text.addActionListener(new ListenIn());
                setVisible(true);
                connect();
                new Incept().start();
        }
       
        private class ListenIn implements ActionListener{
       
                public void actionPerformed(ActionEvent e) {
                        String str = text.getText();
                        text.setText("");
                        try {
                                dos.writeUTF(str);
                        } catch (IOException e1) {
                                e1.printStackTrace();
                        }
                }               
        }
       
        public void connect(){
                try {
                        //文件中读取IP;
                        String ip = "";
                        Properties pro=new Properties();
                        pro.load(new FileInputStream("ip.properties"));
                        ip = pro.getProperty("ip");
                        s=new Socket(ip,8000);
                        dos = new DataOutputStream(s.getOutputStream());
                        dis = new DataInputStream(s.getInputStream());
                } catch (UnknownHostException e) {
                        e.printStackTrace();
                } catch (IOException e) {
                        System.out.println("server is open?");
                        System.exit(0);
                }
        }
       
        private class Incept extends Thread{
                @Override
                public void run() {
                        try {
                                while(true){
                                String str = dis.readUTF();                       
                                ta.setText(ta.getText() + "
" + str);
                                }
                        } catch (IOException e) {
                                System.out.println("server is open?");
                        }
                }               
        }
       
        public static void main(String[] args){
                new Client();
        }
}


只看该作者    顶部
离线 不杀生的狼
会员


精华贴数 0
个人空间 0
技术积分 355 (5251)
社区积分 4 (18252)
注册日期 2007-8-6
论坛徽章:5
授权会员2008年新春纪念徽章生肖徽章2007版:鸡开发板块每日发贴之星ITPUB新首页上线纪念徽章 
      

发表于 2008-5-17 12:54 
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.ArrayList;
import java.util.List;

public class Server {
        ServerSocket ss = null;
        List<ServerClient> connectPerson = new ArrayList<ServerClient>();

        public static void main(String[] args) {
                new Server().start();
        }

        private void start() {
                try {
                        ss = new ServerSocket(8000);
                } catch (IOException e) {
                        System.out.println("error control server,please renew server! if can't startup,attempt stop javaw course");
                        System.exit(0);
                }
                while (true) {
                        try {
                                Socket s = ss.accept();//把监听到连接放到Socket
                                System.out.println("user attempt connect!");
                                ServerClient sc = new ServerClient(s);
                                new Thread(sc).start();
                                connectPerson.add(sc);
                        } catch (IOException e) {
                                e.printStackTrace();
                        }
                }
        }

        private class ServerClient implements Runnable {
                Socket s = null;
                DataInputStream dis = null;
                DataOutputStream dos = null;
                boolean conn = false;
                ServerClient(Socket s) {
                        this.s = s;
                }
               
                private void send(String str){
                        try {
                                dos.writeUTF(str);
                        } catch (IOException e) {
                                connectPerson.remove(this);
                        }
                }

                public void run() {
                        try {
                                dis = new DataInputStream(s.getInputStream());
                                dos = new DataOutputStream(s.getOutputStream());
                                conn = true;
                                while (conn) {
                                        String s = dis.readUTF();
//System.out.println(s);
                    for(int i=0;i<connectPerson.size();i++){
                            ServerClient c=connectPerson.get(i);
                            c.send(s);
                    }
                                }
                        } catch (Exception e) {
                                System.out.println("connect is cut");
                        } finally {
                                try {
                                        dis.close();
                                        s.close();
                                } catch (IOException e) {
                                        e.printStackTrace();
                                }
                        }
                }
        }
}


只看该作者    顶部
离线 justforregister
SAP


精华贴数 1
个人空间 10
技术积分 33424 (22)
社区积分 7413 (182)
注册日期 2005-6-10
论坛徽章:239
现任管理团队成员ITPUB元老NBA2008季后赛纪念徽章欧洲冠军杯纪念徽章NBA常规赛纪念章管理团队2007贡献徽章
参与2007年甲骨文全球大会(中国上海)纪念ITPUB北京香山2007年会纪念徽章会员2007贡献徽章2008北京奥运纪念徽章:马术生肖徽章2007版:鸡 

发表于 2008-5-18 00:19 
nice job


__________________
只看该作者    顶部
离线 rbible
庸者


精华贴数 0
个人空间 0
技术积分 163 (10778)
社区积分 13 (9031)
注册日期 2007-9-19
论坛徽章:0
      
      

发表于 2008-5-20 01:20 
好像看过一本书里
有这么个例子
楼主可以查一下


__________________
只看该作者    顶部
 
    

相关内容


CopyRight 1999-2006 itpub.net All Right Reserved.
北京皓辰广域网络信息技术有限公司. 版权所有
E-mail:Webmaster@itpub.net
京ICP证:010037号 联系我们 法律顾问