首页 > 编程语言 > 详细

Java网络编程笔记6

时间:2015-01-17 12:40:01      阅读:224      评论:0      收藏:0      [点我收藏+]

在前几遍文章中,我们已经知道了客户端与服务器通信,包括多个客户端与服务器的通信,接下来我们演示下客户端与服务器的完整通信过程。


先看效果图

技术分享

                                                客户端1

技术分享 

                                                       客户端2


技术分享

                                                服务器端


服务器线程类:

<span style="font-size:18px;">public class Connection extends Thread {
	private JTextArea txt;
	private Socket st;
	private String msg = null;
	private BufferedReader br = null;
	private PrintStream ps;

	public Connection(Socket st, JTextArea txt) {
		this.st = st;
		this.txt = txt;
		start();
	}

	@Override
	public void run() {
		try {
			br = new BufferedReader(new InputStreamReader(new DataInputStream(
					st.getInputStream())));
			ps=new PrintStream(new DataOutputStream(st.getOutputStream()));
			while(true){
				msg=br.readLine();
				txt.append("从客户端收到信息 "+msg+'\n');
				Server.send(msg);
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	
	public void send(String msg){
		ps.println(msg);
	}
}
</span>

服务器与客户端进行连接:

<span style="font-size:18px;">public class Server extends JFrame {
	private JTextArea txt;
	private ServerSocket ss;
	private static List<Connection> conns=new ArrayList<Connection>();
	public Server(){
		txt=new JTextArea();
		this.setTitle("服务器");
		this.setLayout(new BorderLayout());
		this.add(new JScrollPane(txt),BorderLayout.CENTER);
		this.setSize(500,300);
		this.setVisible(true);
		run();
	}
	private void run(){
		try {
			ss=new ServerSocket(3000);
			txt.append("接受时间:"+new Date()+"\n");
			while(true){
				Socket st=ss.accept();
				conns.add(new Connection(st, txt));
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	public static void send(String msg){
		for(Connection c:conns){
			c.send(msg);
		}
	}
}</span>

服务器主入口:

<span style="font-size:18px;">public class ServerMain {

	public static void main(String[] args) {
		Server server=new Server();
	}

}</span>


客户端:

<span style="font-size:18px;">public class Client extends JFrame implements ActionListener {
	private JTextArea txta;
	private JTextField txtf;
	private JPanel pl;
	private JButton bt;
	private BufferedReader br;
	private DataOutputStream out;
	private PrintStream ps;
	private Container f = this.getContentPane();

	public Client() {
		f.setLayout(new BorderLayout());
		txta = new JTextArea();
		f.add(txta, BorderLayout.CENTER);
		txtf = new JTextField(20);
		bt = new JButton("发送");
		pl = new JPanel();
		pl.setLayout(new FlowLayout());
		pl.add(txtf);
		pl.add(bt);
		bt.addActionListener(this);
		f.add(pl, BorderLayout.SOUTH);
		setTitle("客户端");
		setSize(500, 300);
		setVisible(true);
		run();
		new Thread() {
			{
				start();
			}

			public void run() {
				while (true) {
					try {
						txta.append("收到消息 :" + br.readLine() + "\n");
					} catch (Exception e) {
						e.printStackTrace();
					}
				}
			}
		};

	}

	public void run() {
		 try {
			 Socket socket=new Socket("192.168.12.112", 3000);
			out=new DataOutputStream(socket.getOutputStream());
			ps=new PrintStream(out);
			br=new BufferedReader(new InputStreamReader(socket.getInputStream()));
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	@Override
	public void actionPerformed(ActionEvent e) {
		if(e.getSource()==bt){
			String msg=txtf.getText();
			try {
				ps.println(msg);
				txta.append("已经发送消息:"+msg+"\n");
			} catch (Exception e2) {
				e2.printStackTrace();
			}
		}
	}

}</span>

客户端入口:

<span style="font-size:18px;">public class ClientMain {

	public static void main(String[] args) {
		Client client=new Client();
	}

}</span>




转载请注明出处:http://blog.csdn.net/hai_qing_xu_kong/article/details/42804309   情绪控_ 


Java网络编程笔记6

原文:http://blog.csdn.net/hai_qing_xu_kong/article/details/42804309

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!