?? myserver.java
字號:
package server;
import dipImage.DispImage;
import java.net.*;
import java.io.*;
import javax.swing.JFileChooser;
import javax.swing.JOptionPane;
public class MyServer extends Thread {
ServerSocket serSocket; // 服務socket等待 對方的連接和文件發送
Socket tempSocket; // 由服務socket產生的socket
InputStream inSocket; // 用于讀取
File savedFile = null;
RandomAccessFile inFile = null;
byte byteBuffer[] = new byte[1024];
final int PORT = 4988; //設定服務器端口號
public static void main(String args[]) {
MyServer server = null;
try {
server = new MyServer(4988);
} catch (Exception e) {
e.printStackTrace();
System.out.println("無法傳送文件!");
System.exit(1);
}
server.start();
}
//--------------------開啟服務器,選擇保存文件位置----------------------------------------
public MyServer(int port) throws Exception
{
try {
serSocket = new ServerSocket(this.PORT);// 綁定服務的端口
} catch (Exception e) {
e.printStackTrace();
throw new Exception("Connected failed!");
}
JFileChooser jfc = new JFileChooser("./src");// 以當前的目錄打開
jfc.showSaveDialog(new javax.swing.JFrame());
savedFile = jfc.getSelectedFile(); // 獲取當前的選擇文件引用
if (savedFile != null) // 選擇了文件
{
inFile = new RandomAccessFile(savedFile, "rw");// 用以讀取數據的隨機訪問文件
}
}
//---------------判斷傳送的數據是否是圖片----------------------------------
boolean selectData(String str) {
// 在每個空格字符處進行分解。
String[] ss = str.toLowerCase().split("\\.");
int length = ss.length;
String s = ss[length - 1];
if (s.equalsIgnoreCase("jpg") || s.equalsIgnoreCase("jpeg")
|| s.equalsIgnoreCase("gif") || s.equalsIgnoreCase("bmp"))
return true;
else
return false;
}
//---------------------監聽服務器端口,接收客戶端發過來的數據---------------------------------------
public void run() {
try {
if (this.inFile == null) {
System.out.println("沒有選擇文件");
this.serSocket.close();
return;
}
System.out.println("wait for..." + '\n' + "等待對方接入");
tempSocket = serSocket.accept();
this.inSocket = tempSocket.getInputStream();
} catch (Exception e) {
System.out.println(e.toString());
e.printStackTrace();
return;
}
int amount;
// 以下為傳送文件代碼 和清理工作
try {
while ((amount = inSocket.read(byteBuffer)) != -1) {
inFile.write(byteBuffer, 0, amount);
}
inSocket.close(); // 關閉流
JOptionPane.showMessageDialog(new javax.swing.JFrame(),
"receive successfully!", "提示!",
JOptionPane.PLAIN_MESSAGE);
System.out.println("receive successfully!");
//如果是圖片,則顯示
if (selectData(savedFile.getName())) {
new DispImage("顯示圖片", "src/" + savedFile.getName());
}
inFile.close();
tempSocket.close();
this.serSocket.close();
} catch (IOException e) {
System.out.println(e.toString());
e.printStackTrace();
}
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -