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();
}
}
android 聊天程序
最新推荐文章于 2023-04-30 20:08:48 发布