【Java开源代码栏目提醒】:本文主要为网学会员提供CommunicationServer.java,希望对需要CommunicationServer.java网友有所帮助,学习一下!
package communicationserver;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.net.*;
import java.io.*;
/**
* <p>Title: 服务器端UDP通讯
程序</p>
* <p>Description: 用于服务器端,实现与客户端UDP通讯</p>
* <p>Copyright: Copyright (c) 2002</p>
* <p>Company: 北京师范大学
计算机系</p>
* @author 孙一林
* @version 1.0
*/
public class CommunicationServer extends JFrame {
JPanel contentPane;
JLabel jLabel1 = new JLabel();
JLabel jLabel2 = new JLabel();
JTextField jTextField1 = new JTextField();
JTextArea jTextArea1 = new JTextArea();
private DatagramSocket sendSocket,receiveSocket;//声明发送数据报Socket和接收数据报Socket
private DatagramPacket sendPacket,receivePacket;//声明发送数据报文包和接收数据报文包
private String name,name1;
/**Construct the frame*/
public CommunicationServer() {
enableEvents(AWTEvent.WINDOW_EVENT_MASK);
try {
jbInit();
}
catch(Exception e) {
e.printStackTrace();
}
}
/**Component initialization*/
private void jbInit() throws Exception {
jLabel1.setText("通讯记录:");
jLabel1.setBounds(new Rectangle(4, 4, 67, 29));
//setIconImage(Toolkit.getDefaultToolkit().createImage(CommunicationServer.class.getResource("[Your Icon]")));
contentPane = (JPanel) this.getContentPane();
contentPane.setLayout(null);
this.setSize(new Dimension(400, 200));
this.setTitle("通讯控制台:");
jLabel2.setText("输入通讯内容:");
jLabel2.setBounds(new Rectangle(11, 124, 93, 32));
jTextField1.setText("通讯内容");
jTextField1.setBounds(new Rectangle(118, 125, 269, 30));
jTextField1.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(ActionEvent e) {
jTextField1_actionPerformed(e);
}
});
jTextArea1.setText("你好!");
jTextArea1.setBounds(new Rectangle(7, 39, 380, 70));
contentPane.add(jLabel1, null);
contentPane.add(jTextArea1, null);
contentPane.add(jTextField1, null);
contentPane.add(jLabel2, null);
try{
sendSocket=new DatagramSocket();//实例化一个发送数据报Socket对象
receiveSocket= new DatagramSocket(8000);//实例化一个接收数据报Socket对象
}
catch (SocketException e){
e.printStackTrace();
System.exit(1);
}
}
/**方法waitForPacket用来监听来自于客户端的数据报,当获得数据报后,在文本显示区域显示出来*/
public void waitForPacket(){
while (true){
try{
byte buf[]=new byte[100];
receivePacket=new DatagramPacket(buf,buf.length);//实例化一个接收数据报文包对象
receiveSocket.receive(receivePacket);//以receivePacket为参数,接收数据包
name=receivePacket.getAddress().toString();
if(name1!=name){
jTextArea1.append("\n来自主机:"+name+"\n端口:"+receivePacket.getPort());
}
jTextArea1.append("\n客户:\t");//将接收到的数据包中的数据显示出来
byte[] data = receivePacket.getData();
String receivedString = new String(data,0);
jTextArea1.append(receivedString);
name1=name;
}
catch(IOException e){
jTextArea1.append("网络通讯出现错误,问题在"+e.toString());
}
}
}
/**Overridden so we can exit when window is closed*/
protected void processWindowEvent(WindowEvent e) {
super.processWindowEvent(e);
if (e.getID() == WindowEvent.WINDOW_CLOSING) {
System.exit(0);
}
}
void jTextField1_actionPerformed(ActionEvent e) {
try{
jTextArea1.append("\n服务器:");
String string = jTextField1.getText();
jTextArea1.append(string);
byte[] databyte=new byte[100];
string.getBytes(0,string.length(),databyte,0);
sendPacket=new DatagramPacket(databyte,string.length(),InetAddress.getByName(name),8001);
sendSocket.send(sendPacket);
}
catch(IOException ioe){
jTextArea1.append("
网络通讯出现错误,
问题在"+ioe.toString());
}
}
}