案例四:java网络编程 双工通讯(带界面)

运行结果截图:

 

 

 

/**
 * 欢迎大家使用这个源码 如有疑问请加qq群:151648295
 *
 */
package com.xiangqiao123.server;

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;

import java.io.BufferedReader;
import java.io.PrintWriter;

import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;

import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;

public class MyServer extends JFrame implements ActionListener, KeyListener {

	JPanel jp = null;
	JTextArea jta = null;
	JScrollPane jsp = null;
	JTextField jtf = null;
	JButton jb = null;
	PrintWriter pw = null;

	public static void main(String[] args) {
		new MyServer();
	}

	public MyServer() {
       //为文本域添加一个滚动条
		jta = new JTextArea();
		jsp = new JScrollPane(jta);

		jtf = new JTextField(15);
		jtf.addKeyListener(this);
		jb = new JButton("发送");
		jb.addActionListener(this);

		jp = new JPanel();
		jp.add(jtf);
		jp.add(jb);

		this.add(jsp, BorderLayout.CENTER);
		this.add(jp, BorderLayout.SOUTH);
		this.setSize(300, 200);
		this.setTitle("qq简易聊天");
		this.setIconImage(new ImageIcon("image/icon.jpg").getImage());

		// 设置窗体居中
		Dimension size = Toolkit.getDefaultToolkit().getScreenSize();
		this.setLocation((int) ((size.getWidth() - this.getWidth()) / 2),
				(int) ((size.getHeight() - this.getHeight()) / 2));

		this.setVisible(true);
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

		try {
			ServerSocket ss = new ServerSocket(9999);
			Socket s = ss.accept();

			// 读取从客户端发来的信息
			InputStreamReader isr = new InputStreamReader(s.getInputStream());
			BufferedReader br = new BufferedReader(isr);

			pw = new PrintWriter(s.getOutputStream(), true);
			while (true) {
				String info = br.readLine();
				jta.append(info + "\n");
			}

		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

	@Override
	public void actionPerformed(ActionEvent e) {
		if (e.getSource() == jb) {
			String info = jtf.getText();
			pw.println("服务器:" + info);
			jta.append("服务器:" + info + "\n");
			jtf.setText("");
		}

	}

	@Override
	public void keyTyped(KeyEvent e) {

	}

	@Override
	public void keyPressed(KeyEvent e) {
		// TODO Auto-generated method stub
		if (e.getKeyCode() == KeyEvent.VK_ENTER) {

			String info = jtf.getText();
			pw.println("服务器:" + info);
			jta.append("服务器:" + info + "\n");
			jtf.setText("");
		}
	}

	@Override
	public void keyReleased(KeyEvent e) {
		// TODO Auto-generated method stub

	}

}


 

 

/**
 * 欢迎大家使用这个源码 如有疑问请加qq群:151648295
 *
 */
package com.xiangqiao123.client;

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;

import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;

public class MyClient extends JFrame implements ActionListener,KeyListener{

	 JPanel jp=null;
     JTextArea jta=null;
     JScrollPane jsp=null;
     JTextField jtf=null;
     JButton jb=null;
     
     PrintWriter pw=null;

	  public static void main(String[] args) {
		new  MyClient();
	}
	 
	 public MyClient(){
	
		 
		 jta=new JTextArea();
		 jsp=new JScrollPane(jta);
		 
		 jtf=new JTextField(15);
		 jtf.addKeyListener(this);
		 jb=new JButton("发送");
		 jb.addActionListener(this);
	 
		 jp=new JPanel();
		 jp.add(jtf);
		 jp.add(jb);
		  
	    

		 this.add(jsp,BorderLayout.CENTER);
		 this.add(jp,BorderLayout.SOUTH);
		 this.setSize(300,200);
		 this.setTitle("qq简易聊天");
		 this.setIconImage(new ImageIcon("image/icon.jpg").getImage());
	
	
		 
		 //设置窗体居中
		 Dimension size=Toolkit.getDefaultToolkit().getScreenSize();
		 this.setLocation((int)((size.getWidth()-this.getWidth())/2),(int)((size.getHeight()-this.getHeight())/2));
		 
		 
		 this.setVisible(true);
		 this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);	 
		 
		 try {
		   Socket s=new Socket("127.0.0.1",9999);
		    
		    //读取从客户端发来的信息
		    InputStreamReader isr=new InputStreamReader(s.getInputStream());
		    BufferedReader br=new BufferedReader(isr);
		    
		    pw=new PrintWriter(s.getOutputStream(),true);
		    while(true){
		    	String info=br.readLine();
		    	jta.append(info+"\n");
		    }
		    
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	 }

	@Override
	public void actionPerformed(ActionEvent e) {
		if(e.getSource()==jb){
			String info=jtf.getText();
			pw.println("客户端:"+info);
			jta.append("客户端:"+info+"\n");
			jtf.setText("");
		}
		
	}

	@Override
	public void keyTyped(KeyEvent e) {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void keyPressed(KeyEvent e) {
		// TODO Auto-generated method stub
		if(e.getKeyCode()==KeyEvent.VK_ENTER){
			String info=jtf.getText();
			pw.println("客户端:"+info);
			jta.append("客户端:"+info+"\n");
			jtf.setText("");
		}
		
	}

	@Override
	public void keyReleased(KeyEvent e) {
		// TODO Auto-generated method stub
		
	}

}


 

源码下载:

                点此下载源码

 欢迎大家关注我的博客,有什么问题可以评论,也可以加入我的qq群:151648295  希望大家一起进步。

我的博客更新很快的哦,这次十月一假期我将给大家分享一个j2se的项目,“制作山寨版qq”,欢迎大家一起关注啊。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值