package mytest;
import java.awt.*;
import java.awt.event.*;
import java.io.IOException;
import java.net.*;
import javax.swing.*;
/**
*
* @author hh
*
*/
public class UdpChatServer extends JFrame
{
JTextField putDiag;
JTextArea showDiag;
StringBuffer stb = new StringBuffer();
public UdpChatServer()
{
this.setBounds(300, 300, 400, 500);
this.setTitle("聊天界面s");
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public void showMain()
{
JPanel jp = new JPanel();
jp.setLayout(new BorderLayout());
showDiag = new JTextArea(20,50);
showDiag.setEditable(false);
putDiag = new JTextField();
putDiag.addActionListener(new tfListener());
jp.add(showDiag,BorderLayout.NORTH);
jp.add(putDiag, BorderLayout.SOUTH);
Container containerPane = getContentPane();
containerPane.add(jp);
setVisible(true);
while(true) //总是监听接收端口
recieveData();
}
private class tfListener implements ActionListener
{
public void actionPerformed(ActionEvent e)
{
String str = putDiag.getText().trim();
sendData(str);
stb.append("我说:"+str+"\n");
showDiag.setText(stb.toString());
putDiag.setText("");
}
}
public void sendData(String str)
{
byte[] dataArray = new byte[1000];
dataArray = str.getBytes();
try
{
InetAddress ia = InetAddress.getLocalHost();
DatagramSocket ds = new DatagramSocket(8889);
DatagramPacket dp = new DatagramPacket(dataArray,dataArray.length,ia,8881);
ds.send(dp); //从自方8889端口发送到对方的8881端口
ds.close();
} catch (UnknownHostException e)
{
e.printStackTrace();
} catch (SocketException e)
{
e.printStackTrace();
} catch (IOException e)
{
e.printStackTrace();
}
}
public void recieveData()
{
byte[] dataArray = new byte[1000];
try
{
DatagramSocket ds = new DatagramSocket(8888);
DatagramPacket dp = new DatagramPacket(dataArray,dataArray.length);
ds.receive(dp); //等待接受从自方8888端口接受来的数据
ds.close();
stb.append(new String(dataArray).trim()+"\n");
showDiag.setText(stb.toString());
} catch (SocketException e)
{
e.printStackTrace();
} catch (IOException e)
{
e.printStackTrace();
}
}
public static void main(String[] args)
{
UdpChatServer ucs = new UdpChatServer();
ucs.showMain();
}
}
|