UDP获取图片列表,下载图片

这是我们的一次java作业中的一道题目,第一次接触javaUDP,如果哪位觉有需要改正的地方,尽管提出,谢谢!
Client:

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.net.*;
import java.util.Date;
import java.io.*;
import java.awt.image.*;
import javax.imageio.*;
import javax.imageio.ImageIO;
public class GetRemoteImageClient extends JFrame implements Runnable, ActionListener
{
JTable table;
Object a[][] ={
{"", "", ""}
};
Object name[] = { "名称", "类型", "大小"};
JButton GetImage, GetImageData;
JTextField inputImgName;
JPanel pSouth, pNorth;
Thread thread;
boolean isImage = false;
GetRemoteImageClient()
{
GetImage = new JButton("下载图片");
GetImageData = new JButton("获得图片列表");
GetImage.addActionListener(this);
GetImageData.addActionListener(this);
inputImgName = new JTextField(20);
inputImgName.setEnabled(false);
table = new JTable(a, name);
pSouth = new JPanel();
pNorth = new JPanel();
pNorth.add(new JLabel("输入要下载的图片的名称"));
pNorth.add(inputImgName);
pSouth.add(GetImage);
pSouth.add(GetImageData);
add(pSouth, BorderLayout.SOUTH);
add(pNorth, BorderLayout.NORTH);
add(new JScrollPane(table), BorderLayout.CENTER);
setBounds(100, 100, 600, 400);
setVisible(true);
validate();
thread = new Thread(this);
thread.start();
setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
}
public void actionPerformed(ActionEvent e)
{
if (e.getSource() == GetImageData)
{
Send("图片列表");
}
if (e.getSource() == GetImage)
{
if (!inputImgName.getText().equals(""))
{
JOptionPane.showMessageDialog(null, inputImgName.getText());
Send(inputImgName.getText());
isImage = true;
}
else
JOptionPane.showMessageDialog(null, "请选中要下载的图片!");
}

}
public void Send(String msg)
{
byte b[] = msg.getBytes();
try
{
InetAddress address = InetAddress.getByName("127.0.0.1");
DatagramPacket data = new DatagramPacket(b, b.length, address, 5678);
DatagramSocket mail = new DatagramSocket();
mail.send(data);
}
catch (Exception ex)
{ }
}
public void run()
{
DatagramPacket pack = null;
DatagramSocket mail = null;
byte b[] = new byte[8192];
try
{
pack = new DatagramPacket(b, b.length);
mail = new DatagramSocket(1234);
}
catch (Exception e)
{ }
while (true)
{
int i=0;
try
{
mail.receive(pack);
if (!isImage)
{
String message = new String(pack.getData(), 0, pack.getLength());
GetTableData(message);
}
else
{

String message = new String(pack.getData(), 0, pack.getLength());
File output = new File("C:\\a.jpg");
FileOutputStream fos = new FileOutputStream(output);
int len = Integer.parseInt(message);
int length = 0;
while (length < len)
{
try
{
mail.receive(pack);
length += pack.getLength();
JOptionPane.showMessageDialog(null, length);
fos.write(pack.getData(), 0, pack.getLength());
}
catch (Exception e)
{
fos.flush();
fos.close();
}
}
JOptionPane.showMessageDialog(null, "读取完毕,存储中...");
isImage = false;
}
//FormTable();
}
catch (Exception ex)
{ }
}
}
public void GetTableData(String recvData)
{
//JOptionPane.showMessageDialog(null, recvData);
String[] rows = recvData.split("#");
Object a[][] = new Object[rows.length][3];
//JOptionPane.showMessageDialog(null, rows);
for (int i = 0;i< rows.length; i++)
{
String columns[] = rows[i].split(",");
for (int j = 0; j < columns.length; j++)
{
if (j == columns.length - 1)
a[i][j] = new Date(Long.parseLong(columns[j]));
else
a[i][j] = columns[j];
}
}

getContentPane().removeAll();
table = new JTable(a, name);
table.setRowHeight(20);//设置每行的高度为20
//table.setRowHeight(0, 30);//设置第1行的高度为15
table.addMouseListener(new MouseAdapter()
{
public void mouseClicked(MouseEvent e)
{
String value = table.getValueAt(table.getSelectedRow(), 0).toString();
inputImgName.setText(value);
}
});
table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
//table.setEnabled(false);
add(new JScrollPane(table), BorderLayout.CENTER);
add(pSouth, BorderLayout.SOUTH);
add(pNorth, BorderLayout.NORTH);
validate();
}
public static void main(String args[])
{
new GetRemoteImageClient();
}
}


Server
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.net.*;
import java.io.*;
import java.util.Date;
public class ImageServer implements Runnable
{
File dir = new File("C:\\images");
File fileName[];
ImageServer()
{
Thread thread = new Thread(this);
thread.start();
}
public void Send(byte b[])
{
//byte b[] = datas.getBytes();
try
{
InetAddress address = InetAddress.getByName("127.0.0.1");
DatagramPacket data = new DatagramPacket(b, b.length, address, 1234);
DatagramSocket mail = new DatagramSocket();
mail.send(data);
}
catch (Exception e)
{ }
}
public void run()
{
DatagramPacket pack = null;
DatagramSocket mail = null;
byte b[] = new byte[8192];
try
{
pack = new DatagramPacket(b, b.length);
mail = new DatagramSocket(5678);
}
catch (Exception e)
{ }
while (true)
{
try
{
mail.receive(pack);
String message = new String(pack.getData(), 0, pack.getLength());
if (message.equals("图片列表"))
{
String extendNames = "jpg,jpeg,bmp,png,gif";
String datas = GetImageInfoFromFile(extendNames);
Send(datas.getBytes());
}
else
{
for (int i = 0; i < fileName.length; i++)
{
if (message.equals(fileName[i].getName()))
{
InputStream is = new FileInputStream(fileName[i]);
System.out.println(fileName[i].getName());
//b = new byte[(int)fileName[i].length()];
String length = ""+fileName[i].length();
Send(length.getBytes());
byte[] buffer = new byte[8192];
int len = 0;
while ((len = is.read(buffer)) != -1)
{
System.out.println(len);
Send(buffer);
}
break;
}
}
}
}
catch (Exception ex)
{ }
}
}
public String GetImageInfoFromFile(String extendNames)
{
String data="";
OnlyExtendName imgFilter = new OnlyExtendName(extendNames);
dir = new File("C:\\images");
fileName = dir.listFiles(imgFilter);

for (int i = 0; i < fileName.length; i++)
{
System.out.println("文件名称:" + fileName[i].getName() + ",长度:" + fileName[i].length() + ",修改时间:" + new Date(fileName[i].lastModified()));
data += fileName[i].getName() + "," + fileName[i].length() + "," + fileName[i].lastModified() + "#";
}
data = data.substring(0, data.length() - 1);
return data;
}
public static void main(String args[])
{
new ImageServer();
}
}

class OnlyExtendName implements FilenameFilter
{
/*
* 扩展名数组
* */
private String[] extendName;

public OnlyExtendName(String extendNames)
{
this.extendName = extendNames.split(",");
}

public boolean accept(File dir, String name)
{
if (extendName != null)
{
boolean isAccept = false;
for (int i = 0; i < extendName.length; i++)
{
isAccept = isAccept || name.endsWith("." + extendName[i]);
}
return isAccept;
}
return false;
}
}

小结:之前计算机网络课,制作了一个C#的聊天程序TCP的,因为TCP是面向连接的,所以使用异步,但是UDP不同,无连接的数据报传送,只管网服务端的端口发送,收没收到不清楚。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值