package socket.file;
import java.io.*;
import java.net.*;
import javax.swing.*;
/**
* 设计界面,在服务器端、客服端间传输图片和文件
*
* @author JH
* @date 2014-9-27
*/
public class Server {
private SocketFrame socketFrame;
private final int port = 5674;
public Server() {
try {
socketFrame = new SocketFrame();
socketFrame.setTitle("Server");
while (true) {
socket = server.accept();
System.
out.
println("Server : new socket");
socketFrame.setSocket(socket);
new Thread(Server.
this::run
).
start();
}
System.
out.
println("Error Server : " + e
);
}
}
private void run() {
while (true) {
socketFrame.receive();
}
}
public static void main
(String[] args
) {
try {
JFrame.
setDefaultLookAndFeelDecorated(true);
JDialog.
setDefaultLookAndFeelDecorated(true);
e.printStackTrace();
}
new Server();
}
}
package socket.file;
import java.io.*;
import java.net.*;
import javax.swing.*;
import java.util.StringTokenizer;
public class Client {
private final int port = 5674;
private SocketFrame socketFrame;
public Client() {
try {
client.setSoTimeout(100 * 1000);// 最迟响应时间
socketFrame = new SocketFrame();
socketFrame.setSocket(client);
socketFrame.setTitle("Client");
run();
System.
out.
println("Error Server : " + e
);
}
}
private void run() {
while (true) {
socketFrame.receive();
}
}
private void getHost() {
while (true) {
.showInputDialog("Enter Server IP : eg. 10.110.124.54");
try {
while (token.hasMoreTokens()) {
Integer.
valueOf(token.
nextToken());
}
continue;
}
break;
}
}
public static void main
(String[] args
) {
try {
JFrame.
setDefaultLookAndFeelDecorated(true);
JDialog.
setDefaultLookAndFeelDecorated(true);
e.printStackTrace();
}
new Client();
}
}
package socket.file;
import java.io.*;
import java.net.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.text.BadLocationException;
public class SocketFrame
extends JFrame {
private final int WIDTH = 480;
private final int HEIGHT = 315;
public SocketFrame() {
setSize(WIDTH, HEIGHT);
Dimension dime
= getToolkit
().
getScreenSize();
setLocation((dime.width - WIDTH) / 2, (dime.height - HEIGHT) / 2);
createPanel();
setDefaultCloseOperation
(JFrame.
EXIT_ON_CLOSE);
setVisible(true);
}
private void createPanel() {
sendFile
= new JButton("Send File");
sendFile.addActionListener(e -> sendFile());
sendMsg.addActionListener(e -> sendMsg());
buttonPanel.add(sendFile);
buttonPanel.add(sendMsg);
}
});
}
// 发送文件
private void sendFile() {
int option = chooser.showOpenDialog(this);
return;
File file
= chooser.
getSelectedFile();
long length = file.length();
textArea.append("开始发送文件 : " + file.getName() + "\n");
try {
// 发送文件名标记
out.writeUTF(file.getName());
// 发送文件长度标记
out.writeLong(file.length());
// 开启此文件的输入流
file));
byte[] bytes = new byte[1024];
int len = 0;
int passedLen = 0;
while ((len = input.read(bytes)) != -1) {
out.write(bytes, 0, len);
passedLen += len;
textArea.append("文件已传送 : " + (passedLen * 100 / length) + "%\n");
out.flush();
}
out.flush();
input.close();
textArea.append("发送完成 : " + file.getName() + "\n");
textArea.setCaretPosition(textArea.getLineStartOffset(textArea
.getLineCount() - 1));
System.
out.
println("From Send() : " + e
);
}
}
// 发送消息
private void sendMsg() {
if (msg.length() == 0)
return;
try {
// 发送消息的标记
out.writeUTF("Message");
out.writeUTF(msg);
out.flush();
e.printStackTrace();
}
}
// 接收 分为 消息和文件
public void receive() {
try {
// 类型标记
String InforType
= in.
readUTF();
switch (InforType) {
case "Message":
textArea.append(msg + "\n");
break;
default:
// 打开个对话框,获取文件保存路径
chooser.
setSelectedFile(new File(InforType
));
int option = chooser.showSaveDialog(this);
return;
String path
= chooser.
getSelectedFile().
getAbsolutePath();
textArea.append("开始接收文件 : " + InforType + "\n");
int fileLength = (int) in.readLong();
byte[] buf = new byte[fileLength];
// output-开启文件的输出流
int len = 0;// 一次成功读到的字节
int passedLen = 0;// 目前已读到的字节
while (passedLen < fileLength) {
len = in.read(buf, passedLen, fileLength - passedLen);
if (len > 0) {
passedLen += len;
} else
break;
textArea.append("文件已接收 : " + (passedLen * 100 / fileLength)
+ "%\n");
BufferString.
append("" + new String(buf,
0, len
) + "\n");
}
output.write(buf);
output.flush();
output.close();
textArea.append("接收完成,文件存为 : " + path + "\n");
// 如果是文本文件 打印到文本区里
InforType = InforType.toLowerCase();
if (InforType.endsWith(".txt") || InforType.endsWith(".html")
|| InforType.endsWith(".htm")
|| InforType.endsWith(".java")
|| InforType.endsWith(".jsp")) {
textArea.append(BufferString.toString() + "\n");
}
// 如果是图片 打开个对话框显示
if (InforType.endsWith(".png") || InforType.endsWith(".gif")
|| InforType.endsWith(".jpg")
|| InforType.endsWith(".bmp")
|| InforType.endsWith(".jpeg")) {
new ImageDialog(path);
}
}
chooser.
setSelectedFile(new File("."));;
// 置光标于最后
textArea.setCaretPosition(textArea.getLineStartOffset(textArea
.getLineCount() - 1));
setVisible(true);
e.printStackTrace();
}
}
public void setSocket
(Socket socket
) {
try {
socket.getOutputStream()));
socket.getInputStream()));
e.printStackTrace();
}
}
}
package socket.file;
import javax.swing.*;
import java.awt.*;
import java.awt.image.BufferedImage;
/**
* 显示图片
*/
public class ImageDialog
extends JDialog {
private int WIDTH = 500;
private int HEIGHT = 500;
public ImageDialog
(String path
) {
scaleImage();
setTitle(path);
setVisible(true);
}
super.paint(g);
g.drawImage(img.getImage(), 5,30 , WIDTH, HEIGHT, null);
}
public void scaleImage() {
int imgWidth = img.getIconWidth();
int imgHeight = img.getIconHeight();
if (imgWidth >= imgHeight) {
HEIGHT
= (int) Math.
round((imgHeight
* WIDTH
* 1.0 / imgWidth
));
} else {
WIDTH
= (int) Math.
round((imgWidth
* HEIGHT
* 1.0 / imgHeight
));
}
setSize(WIDTH+5, HEIGHT+30);
System.
out.
println("scrImg W " + imgWidth
+ " H " + imgHeight
);
System.
out.
println("Scale W " + WIDTH
+ " H " + HEIGHT
);
/*
* JLabel label = new JLabel(); JPanel panel = (JPanel)
* getContentPane(); panel.setOpaque(false);
*
* label.setBounds(0, 0, WIDTH, HEIGHT);
*
* getLayeredPane().add(label, new Integer(Integer.MIN_VALUE));
*/
}
}