网络聊天工具
2012-08-21 00:04
267 查看
package com.wyj.thread.socket;
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 javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JTextArea;
import javax.swing.JTextField;
public class NetChat extends JFrame implements ActionListener
{
private JTextField txtSend;
private JTextArea txaContent;
JButton btnSend;
DatagramSocket socket = null;
/**
* @param args
*/
public static void main(String[] args)
{
new NetChat();
}
public NetChat()
{
this.setBounds(130, 130, 219, 359);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setVisible(true);
getContentPane().setLayout(null);
txaContent = new JTextArea();
txaContent.setBounds(10, 10, 178, 265);
getContentPane().add(txaContent);
txtSend = new JTextField();
txtSend.setBounds(10, 298, 113, 22);
getContentPane().add(txtSend);
btnSend = new JButton();
btnSend.addActionListener(this);
btnSend.setText("send");
btnSend.setBounds(129, 295, 69, 28);
getContentPane().add(btnSend);
try
{
socket = new DatagramSocket(8888);
}
catch (SocketException e)
{
// TODO 自动生成 catch 块
e.printStackTrace();
}
// 启动线程
new Thread(new RecieveInfo(socket)).start();
}
public void actionPerformed(final ActionEvent e)
{
if (e.getSource() == btnSend)
{
// 定义套接字
try
{
// 要发送的信息
String mess = txtSend.getText();
if (mess.equals(""))
{
return;
}
// 定义发送包
DatagramPacket dp = new DatagramPacket(mess.getBytes(),
mess.getBytes().length,
InetAddress.getByName("127.0.0.1"), 8888);
// 发送
socket.send(dp);
}
catch (Exception e1)
{
// TODO 自动生成 catch 块
e1.printStackTrace();
}
finally
{
// socket.close();
}
}
}
class RecieveInfo implements Runnable
{
DatagramSocket socket;
public RecieveInfo(DatagramSocket socket)
{
this.socket = socket;
}
public void run()
{
byte[] tempByte = null;
int length = 0;
try
{
while (true)
{
byte[] bs = new byte[512];
// 定义接收包
DatagramPacket dp = new DatagramPacket(bs, bs.length);
//接收信息
try
{
socket.receive(dp);
}
catch (IOException e)
{
e.printStackTrace();
}
for (byte b : bs)
{
if (0 != b)
{
length++;
}
}
tempByte = new byte[length];
for (int i = 0; i < 512; i++)
{
if (0 != bs[i])
{
tempByte[i] = bs[i];
}
}
// 将字节数组转换为字符串
String mess = new String(tempByte);
txaContent.append(mess + "\n");
System.out.println(mess);
length = 0;
}
}
catch (Exception e)
{
// TODO 自动生成 catch 块
e.printStackTrace();
}
finally
{
//socket.close();
}
}
}
}
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 javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JTextArea;
import javax.swing.JTextField;
public class NetChat extends JFrame implements ActionListener
{
private JTextField txtSend;
private JTextArea txaContent;
JButton btnSend;
DatagramSocket socket = null;
/**
* @param args
*/
public static void main(String[] args)
{
new NetChat();
}
public NetChat()
{
this.setBounds(130, 130, 219, 359);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setVisible(true);
getContentPane().setLayout(null);
txaContent = new JTextArea();
txaContent.setBounds(10, 10, 178, 265);
getContentPane().add(txaContent);
txtSend = new JTextField();
txtSend.setBounds(10, 298, 113, 22);
getContentPane().add(txtSend);
btnSend = new JButton();
btnSend.addActionListener(this);
btnSend.setText("send");
btnSend.setBounds(129, 295, 69, 28);
getContentPane().add(btnSend);
try
{
socket = new DatagramSocket(8888);
}
catch (SocketException e)
{
// TODO 自动生成 catch 块
e.printStackTrace();
}
// 启动线程
new Thread(new RecieveInfo(socket)).start();
}
public void actionPerformed(final ActionEvent e)
{
if (e.getSource() == btnSend)
{
// 定义套接字
try
{
// 要发送的信息
String mess = txtSend.getText();
if (mess.equals(""))
{
return;
}
// 定义发送包
DatagramPacket dp = new DatagramPacket(mess.getBytes(),
mess.getBytes().length,
InetAddress.getByName("127.0.0.1"), 8888);
// 发送
socket.send(dp);
}
catch (Exception e1)
{
// TODO 自动生成 catch 块
e1.printStackTrace();
}
finally
{
// socket.close();
}
}
}
class RecieveInfo implements Runnable
{
DatagramSocket socket;
public RecieveInfo(DatagramSocket socket)
{
this.socket = socket;
}
public void run()
{
byte[] tempByte = null;
int length = 0;
try
{
while (true)
{
byte[] bs = new byte[512];
// 定义接收包
DatagramPacket dp = new DatagramPacket(bs, bs.length);
//接收信息
try
{
socket.receive(dp);
}
catch (IOException e)
{
e.printStackTrace();
}
for (byte b : bs)
{
if (0 != b)
{
length++;
}
}
tempByte = new byte[length];
for (int i = 0; i < 512; i++)
{
if (0 != bs[i])
{
tempByte[i] = bs[i];
}
}
// 将字节数组转换为字符串
String mess = new String(tempByte);
txaContent.append(mess + "\n");
System.out.println(mess);
length = 0;
}
}
catch (Exception e)
{
// TODO 自动生成 catch 块
e.printStackTrace();
}
finally
{
//socket.close();
}
}
}
}
相关文章推荐
- Pidgin for windows 与MSN、ICQ、QQ、YAHOO、GoogleTalk、AIM/AOL等网络聊天工具互联互通的新型聊天软件
- 网络聊天工具Socket编程心得
- Pidgin!与MSN、ICQ、QQ、YAHOO、GoogleTalk、AIM/AOL等网络聊天工具互联互通的新型聊天软件
- 利用TCP协议通过Socket编写的网络聊天工具1-客户端
- 利用TCP协议通过Socket编写的网络聊天工具2-通用类设计
- 网络聊天工具Socket编程
- 利用TCP协议通过Socket编写的网络聊天工具3-服务器端设计
- 网络嵌入聊天工具
- 网络聊天工具Socket编程心得
- [置顶] JAVA进阶案例 TCP编程之网络聊天工具(客户端)
- 网民需要小心使用U盘及网络聊天工具
- 基于UDP协议的局域网网络聊天工具
- TCP编程--网络聊天工具
- 基于WebServices简易网络聊天工具的设计与实现
- 网络聊天工具的实现
- VC++6.0+MFC网络聊天工具(含源码)
- 基于WebServices简易网络聊天工具的设计与实现
- [置顶] JAVA进阶案例 TCP编程之网络聊天工具(服务端)
- JAVA基础 day25 网络编程 IP类 UDP,TCP传输学习 简易聊天工具 TCP并发学习
- 实例:网络聊天和文件传输的实现