您的位置:首页 > 理论基础 > 计算机网络

网络聊天工具

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();

}

}

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: