UDP通信——简单的不能再简单的聊天程序(老鸟跳过)

在网上看到 好多UDP的聊天程序,都没有注释所以…… 我只是在写这个程序的时候把我遇到的问题加上了注释。 

package hr.csdn.com;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.FlowLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;
import java.net.UnknownHostException;
import java.util.jar.JarFile;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JList;
import javax.swing.JPanel;
import javax.swing.JTextArea;
import javax.swing.JTextField;

public class ChartTest extends JFrame implements ActionListener {

	/**
	 * @param args
	 * 
	 */
	 JPanel panel1,panel2;
	 JTextField text1,text2,text3;
	 JTextArea ta;
	 JButton btn;
	 JList l;
	public ChartTest(){
		super();
		this.setBounds(200,200,400,400);//设置窗体的坐标和大小
		panel1=new JPanel();
		ta=new JTextArea(15,15);
		text1=new JTextField(15);
		text3=new JTextField(15);
		text2=new JTextField(15);
		btn=new JButton("发送");
		btn.addActionListener(this);//给BUTTON设置监听器
		panel1.setLayout(new BorderLayout());
		panel1.add(text3,"North");
		panel1.add(ta,"Center");
		panel2=new JPanel();
		panel2.setLayout(new GridLayout(1,2));
		panel2.add(text1);
		panel2.add(text2);
		panel2.add(btn);
		this.setLayout(new BorderLayout());
		this.add(panel1,"North");
		this.add(panel2,"South");
		this.setVisible(true);
		
	}
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		//ChartTest ch=new ChartTest();
		try {
			DatagramSocket rece=new DatagramSocket();//因为是UDP通信,所以开启程序的时候必须先启动 接收端,开启这个线程
			ChatRe c=new ChatRe(rece);
			new Thread(c).start();
		} catch (SocketException e1) {
			// TODO Auto-generated catch block
			e1.printStackTrace();
		}
	}
	@Override
	public void actionPerformed(ActionEvent e) {//这是BUTTON按钮的监听器,当你点击这个按钮的时候,发送消息
		// TODO Auto-generated method stub
		
		DatagramSocket ds;//创建一个DatagramSocket对象
		try {
			ds = new DatagramSocket();
			String str=this.text2.getText();
			try {
				DatagramPacket dp=new DatagramPacket(str.getBytes(),str.getBytes().length,InetAddress.getByName("127.0.0.1"),50000);
				ds.send(dp);
				ds.close();
			} catch (Exception e1) {
				// TODO Auto-generated catch block
				e1.printStackTrace();
			}
		} catch (SocketException e1) {
			// TODO Auto-generated catch block
			e1.printStackTrace();
		}
	}
}
class ChatRe implements Runnable{//单独开启一个线程 用来接收 信息
	ChartTest ch=new ChartTest();//这里创建一个ChartTest对象 用来调用下文中的ta 也就是把接收到的信息放到ta中
	public  DatagramSocket ds;
 public ChatRe(DatagramSocket ds){
	 this.ds=ds;
 }
	@Override
	public void run() {
		// TODO Auto-generated method stub
		try {
			ds=new DatagramSocket(50000);
		} catch (SocketException e1) {
			// TODO Auto-generated catch block
			e1.printStackTrace();
		}
		byte[] buf=new byte[1024];
		DatagramPacket dp=new DatagramPacket(buf, buf.length);
		try {
			while(true){
				ds.receive(dp);
				String str=new String(dp.getData(),0,dp.getLength());
				ch.ta.setText(str);
			}
			
			
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		ds.close();
	}
	
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值