简易聊天系统-实现发送,清屏,聊天记录和震动功能
2013-09-10 21:46
399 查看
import java.awt.BorderLayout; import java.awt.Button; import java.awt.Frame; import java.awt.Panel; import java.awt.TextArea; import java.awt.TextField; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.KeyAdapter; import java.awt.event.KeyEvent; import java.awt.event.KeyListener; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import java.io.BufferedOutputStream; import java.io.BufferedWriter; import java.io.ByteArrayOutputStream; import java.io.FileInputStream; import java.io.FileWriter; import java.io.IOException; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetAddress; import java.net.Socket; import java.net.SocketException; import java.net.UnknownHostException; import java.text.SimpleDateFormat; import java.util.Date; import java.util.Scanner; import javax.xml.crypto.Data; public class ChatDemo extends Frame { private TextArea viewt1; private TextArea sendt2; private TextField textField; private Button send; private Button clear; private Button log; private Button shake; private DatagramSocket datagramSocket; private BufferedWriter fos; public ChatDemo() { init(); panelSouth(); panelCenter(); handleControl(); new receiver().start(); } private void panelCenter() { Panel panel = new Panel(); viewt1 = new TextArea(); sendt2 = new TextArea(5, 1); panel.setLayout(new BorderLayout()); viewt1.setEditable(false); panel.add(viewt1, BorderLayout.CENTER); panel.add(sendt2, BorderLayout.SOUTH); this.add(panel, BorderLayout.CENTER); } private void panelSouth() { Panel panel = new Panel(); textField = new TextField(10); textField.setText("192.168.3.161"); send = new Button("发送"); clear = new Button("清屏"); log = new Button("记录"); shake = new Button("震动"); panel.add(textField); panel.add(send); panel.add(clear); panel.add(log); panel.add(shake); this.add(panel, BorderLayout.SOUTH); } private void handleControl() { this.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { System.exit(0); } }); send.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { send(); } }); sendt2.addKeyListener(new KeyAdapter() { @Override public void keyReleased(KeyEvent e) { if (e.getKeyCode() == KeyEvent.VK_ENTER) { send(); e.consume(); } } }); clear.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { viewt1.setText(""); } }); log.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { loadfile(); } }); shake.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { sendData(); } }); } private void sendData() { try { DatagramPacket datagramPacket = new DatagramPacket( new byte[] { -1 }, 1, InetAddress.getByName(textField .getText()), 9999); datagramSocket.send(datagramPacket); } catch (Exception e) { e.printStackTrace(); } } private void loadfile() { viewt1.setText(""); try { fos.flush(); FileInputStream fileInputStream = new FileInputStream("abc.txt"); ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); int len; byte[] arr = new byte[1024]; while ((len = fileInputStream.read(arr)) != -1) { byteArrayOutputStream.write(arr, 0, len); } byte[] arr2 = byteArrayOutputStream.toByteArray(); String ss = new String(arr2); viewt1.setText(ss); } catch (Exception e) { e.printStackTrace(); } } private void send() { String txtString = sendt2.getText(); String ipString = textField.getText(); try { DatagramPacket datagramPacket = new DatagramPacket( txtString.getBytes(), txtString.getBytes().length, InetAddress.getByName(ipString), 9999); datagramSocket.send(datagramPacket); String currenttimeString = getDate(); synchronized (this) { String str = currenttimeString + " " + "我对 " + ipString + "说\r\n" + txtString + "\n\n"; viewt1.append(str); fos.write(str); sendt2.setText(""); } } catch (Exception e) { e.printStackTrace(); } } private String getDate() { Date date = new Date(); SimpleDateFormat simpleDateFormat = new SimpleDateFormat( "yyyy-MM-dd HH:mm:ss"); return simpleDateFormat.format(date); } private void init() { this.setSize(300, 600); this.setLocation(600, 50); this.setVisible(true); try { datagramSocket = new DatagramSocket(); fos = new BufferedWriter(new FileWriter("abc.txt", true)); } catch (Exception e) { e.printStackTrace(); } } class receiver extends Thread { public void run() { try { DatagramSocket datagramSocket = new DatagramSocket(9999); DatagramPacket datagramPacket = new DatagramPacket( new byte[1024], 1024); while (true) { datagramSocket.receive(datagramPacket); String ip = datagramPacket.getAddress().getHostAddress(); String time = getDate(); byte[] arr = datagramPacket.getData(); int len = datagramPacket.getLength(); if (len == 1 && arr[0] == -1) { shake(); continue; } synchronized (ChatDemo.this) { String string1 = new String(arr, 0, len); viewt1.append(time + " " + ip + " " + "对我说:\r\n" + string1 + "\r\n\r\n"); } } } catch (Exception e) { e.printStackTrace(); } } } private void shake() { int x = this.getLocation().x; int y = this.getLocation().y; try { for (int i = 0; i < 10; i++) { Thread.sleep(30); this.setLocation(x + 20, y + 20); Thread.sleep(30); this.setLocation(x - 20, y - 20); Thread.sleep(30); this.setLocation(x - 20, y + 20); Thread.sleep(30); this.setLocation(x + 20, y - 20); Thread.sleep(30); this.setLocation(x + 20, y + 20); Thread.sleep(30); this.setLocation(x, y); }}catch (InterruptedException e) { e.printStackTrace(); } } public static void main(String[] args) { new ChatDemo(); } }
相关文章推荐
- 聊天功能,实现:每增加一条消息整体往上移动,滚动查看聊天记录
- 学生信息记录系统,主要实现增删改查功能,考虑用堆栈、队列来写下
- QUdpSocket实现聊天功能(时间过滤器、回车发送聊天内容)
- java网络socket编程(七)之java中NIO实现聊天系统的群聊功能
- 记录:使用PHPMailer在ThinkPHP3.2.3上实现发送邮件功能
- 简易版聊天系统实现 Socket VS NIO两种实现方式
- 简易聊天室(Socket实现粗略的Android聊天功能)
- Socket编程实现简易的聊天功能
- 调用webpowerAPI实现邮件发送功能(系统邮件一对一发送)
- iOS-调用系统的短信和发送邮件功能,实现短信分享邮件分享
- java在线聊天项目0.3版本 制作客户端窗体,实现发送按钮和回车发送信息功能,使用ActionListener监听事件中actionPerformed方法(用内部类和匿名内部类两种方法)
- 基于smack的即时聊天系统之登陆功能的实现
- UDP实现的简易双向聊天功能
- 基于smack的即时聊天系统之文件接收功能实现
- unity调用Android Api实现短信发送和震动功能
- iOS-调用系统的短信和发送邮件功能,实现短信分享邮件分享
- 安卓局域网飞讯:聊天,文件发送,对讲机功能实现!
- Android----Intent,运用由android系统帮助匹配实现打电话、发送短信、打开网页、播放音乐、打开视频、打开图片、安装APK、通知栏消息、拍照上传头像等功能
- python编写简易聊天室实现局域网内聊天功能
- Python django实现简单的邮件系统发送邮件功能