import java.awt.event.WindowAdapter
import java.awt.event.WindowEvent
import java.io.*
import java.net.*/*6、 采用UDP协议,编写一个Java网络应用程序,该应用分服务器端程序和客户端程序两部分。
* 客户端指定一个服务器上的文件名,让服务器发回该文件的内容,或者提示文件不存在。
* (20分)(服务端程序和客户端程序分别命名为Server.java和Client.java)*/
public class N4BT6 extends Frame
{
DatagramSocket socket
DatagramPacket packet byte[] buf
File file
FileInputStream input
String message = "该文件不存在"
TextArea text
public N4BT6(String title)
{
super(title)
text = new TextArea(6,4)
add(text)
setSize(400, 300)
setVisible(true)
addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{
dispose()
}
})
buf = new byte[1024]
try
{
socket = new DatagramSocket(1230)
packet = new DatagramPacket(buf, buf.length)
socket.receive(packet)
file = new File(new String(packet.getData()))
socket = new DatagramSocket()
}
catch (Exception e)
{e.printStackTrace()
}
if(file.exists())
{
try
{
buf = new byte[(int)file.length()]
packet = new DatagramPacket(buf,buf.length,InetAddress.getLocalHost(),1234)
input = new FileInputStream(file)
input.read(buf)
socket.send(packet)
}
catch (IOException e)
{
e.printStackTrace()
}
}
else
{
try
{
packet = new DatagramPacket(message.getBytes(),message.getBytes().length,
InetAddress.getLocalHost(),1234)
socket.send(packet)
}
catch (Exception e)
{
e.printStackTrace()
}
}
}
public static void main(String[] args)
{
new N4BT6("Server")
}
}
客户端:import java.awt.*
import java.awt.event.*
import java.net.DatagramPacket
import java.net.DatagramSocket
import java.net.InetAddresspublic class N4BT6_2 extends Frame
{
TextArea text
String message = "Q.txt"
DatagramSocket socket
DatagramPacket packet
byte[] buf
public N4BT6_2(String title)
{
super(title)
text = new TextArea(6,4)
add(text)
setSize(400, 300)
setVisible(true)
addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{
dispose()
}
})
try
{
socket = new DatagramSocket()
packet = new DatagramPacket(message.getBytes(),message.getBytes().length,
InetAddress.getLocalHost(),1230)
socket.send(packet)
}
catch (Exception e)
{
e.printStackTrace()
}
try
{
buf = new byte[1024]
socket = new DatagramSocket(1234)
packet = new DatagramPacket(buf,buf.length)
socket.receive(packet)
text.append(new String(buf))
}
catch (Exception e)
{
e.printStackTrace()
}
}
public static void main(String[] args)
{
new N4BT6_2("Client")
}
}
有两种方法:
客户端和服务端创建两个连接,一个连接用于发消息,一个连接用于发文件。
客户端和服务端使用同一个连接,数据不要直接发出去,按照一定的格式制订一个协议,数据一块一块的发,每块前面加上块类型和长度,类型表明发送的是消息数据还是文件数据。
欢迎分享,转载请注明来源:夏雨云
评论列表(0条)