.64.4"),5000);//发送数据报,其中你可以用你自己的主机IP替换器中的IP地址
sendSocket.send(sendPacket);
}catch(IOException ioe)
{
textarea.appendText("网络通讯出现错误,问题在"+ioe.toString());
}
return true;
}
}
使用Java实现数据报通讯过程(3)
时间:2010-12-25
二、服务器端应用程序的工作流程
不同于基于数据流通讯方式,在数据报通讯中,通讯双方之间并不要建立连接,所以,服务器应用程序通讯过程与客户端应用程序的通讯过程使非常相似的,也要建立数据报通讯DatagramSocket,构建数据报文包DatagramPacket,接收数据报和发送数据报,处理接收缓冲区内的数据,通讯完毕后,关闭数据报通讯Socket。不同的是,服务器应用程序要面向网络中的所有计算机,所以服务器应用程序收到一个包文后要分析它,得到数据报的源地址信息,这样才能创建正确的返回结果报文给客户机。
下面我给出了一个数据报通讯的服务器段程序,由于服务器端的相应应用程序和客户端程序比较相似,所以我不想详细的注释,仅列出程序供大家参考:
1、javaCommunicationServer.java
import java.net.*;
import java.io.*;
import java.awt.*;
import java.applet.Applet;
public final class javaCommunicationServer extends Frame
{
private Label label1,label2 ;
private Panel panel1,panel2;
private TextField textfield;
private String name,name1;
private TextArea textarea;
private DatagramSocket sendSocket,receiveSocket;
private DatagramPacket sendPacket,receivePacket;
public javaChatServer()
{
super("通讯控制台:");//使用超类构造方法,构造一个Frame
panel1=new Panel();
panel1.setLayout(new BorderLayout());
label1=new Label("通话纪录");
textarea=new TextArea(10,20);
textarea.setText("欢迎您!");
panel1.add("North",label1);
panel1.add("Center",textarea);
add("North",panel1);
panel2=new Panel();
panel2.setLayout(new BorderLayout());
label2=new Label("发言:");
panel2.add("Center",label2);
textfield=new TextField(20);
panel2.add("South",textfield);
add("Center",panel2);
show();
try
{
sendSocket=new DatagramSocket();
receiveSocket= new DatagramSocket(5000);
}
catch (SocketException e)
{
e.printStackTrace();
System.exit(1);
}
}
public void waitForPacket()
{
while (true)
{
try
{
byte buf[]=new byte[100];
receivePacket=new DatagramPacket(buf,buf.length);
receiveSocket.receive(receivePacket);
name=receivePacket.getAddress().toString();
if(name1!=name)
{
textarea.appendText(" 来自主机:"+name+" 端口:"+receivePacket.getPort());
}
textarea.appendText(" 客户: &quo
|