android 聊天程序

package com.ouling.ex_udp_chat;

import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

public class Ex_udp_chatActivity extends Activity {

	private EditText display, content, ip_edtext, port_edtext;
	private Button btn_send;
	private Context context;
	private DatagramSocket ds;
	private Handler my_handler;

	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);

		context = (Context) this;
		display = (EditText) findViewById(R.id.display);
		content = (EditText) findViewById(R.id.content);
		ip_edtext = (EditText) findViewById(R.id.ip);
		port_edtext = (EditText) findViewById(R.id.port);
		btn_send = (Button) findViewById(R.id.send);

		my_handler=new Handler(){

			@Override
			public void handleMessage(Message msg) {
				// TODO Auto-generated method stub
				super.handleMessage(msg);
				
				String text=msg.getData().getString("text");
				display.getText().append(text);
			}
			
		};
		Chat_init(my_handler);// 开启服务端,接收消息

		OnClickListener listener = new OnClickListener() {
			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub
				String ip = ip_edtext.getText().toString();
				String port = port_edtext.getText().toString();
				String msg = content.getText().toString();

				if ((ip.equals("")) || (port.equals("")) || (msg.equals(""))) {
					Toast.makeText(context, "请输入对方的ip地址和端口号以及需要发送的消息", 1000)
							.show();
					return;
				}
				display.getText().append("\n本机发送到"+ip+"的信息为:\n"+msg);
				byte[] buf;
				buf = msg.getBytes();
				try {
				    InetAddress a=InetAddress.getByName(ip);
					DatagramPacket dp = new DatagramPacket(buf, buf.length,
							InetAddress.getByName(ip), Integer
									.valueOf(port));
					ds.send(dp);
				} catch (Exception ex) {
					ex.printStackTrace();
				}
				content.setText("");
			}
		};
		
		btn_send.setOnClickListener(listener);
		

	}

	// 服务端,接收消息
	public void Chat_init(final Handler handler) {
		try {
			ds = new DatagramSocket(3000);// 端口号为3000
		} catch (Exception ex) {
			ex.printStackTrace();
		}
		new Thread(new Runnable() {
			public void run() {
				byte buf[] = new byte[1024*1024];
				DatagramPacket dp = new DatagramPacket(buf, 1024*1024);
				while (true) {
					try {
						ds.receive(dp);
						String text = "\n来自" + dp.getAddress().getHostAddress()
								+ "的消息:\n" + new String(buf, 0, dp.getLength());
						System.out.println(text);
						Message message = new Message();
						Bundle bundle = new Bundle();
						bundle.putString("text", text);
						message.setData(bundle);
						handler.sendMessage(message);
					} catch (Exception e) {
						e.printStackTrace();
					}
				}
			}
		}).start();

	}
}



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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值