1. 程式人生 > >Fastdfs客戶端連線超時解決方案

Fastdfs客戶端連線超時解決方案

歡迎掃碼加入Java高知群交流


Linux伺服器上安裝好的FastDFS之後,在伺服器上測試上傳是沒問題的:

/usr/local/bin/fdfs_test /etc/fdfs/client.conf upload a.html

返回的資訊如下:
This is FastDFS client test program v3.06

Copyright (C) 2008, Happy Fish / YuQing

FastDFS may be copied only under the terms of the GNU General
Public License V3, which may be found in the FastDFS source kit.
Please visit the FastDFS Home Page http://www.csource.org/ 
for more detail.

[2016-03-05 14:31:53] INFO - base_path=/home/yuqing/fastdfs, connect_timeout=30, network_timeout=60, tracker_server_count=1, anti_steal_token=0, anti_steal_secret_key length=0

tracker_query_storage_store_list_without_group: 
	server 1. group_name=group1, ip_addr=192.168.0.168, port=23000

group_name=group1, ip_addr=192.168.0.168, port=23000
storage_upload_by_filename
group_name=group1, remote_filename=M00/00/00/ezlCY1bafVn06_1qAAAAGUEWZqQ75.html
source ip address: 192.168.0.168
file timestamp=2016-03-05 14:31:53
file size=25
file crc32=1091987108
file url: http://192.168.0.168/group1/M00/00/00/ezlCY1bafVn06_1qAAAAGUEWZqQ75.html
storage_upload_slave_by_filename
group_name=group1, remote_filename=M00/00/00/ezlCY1bafVn06_1qAAAAGUEWZqQ75_big.html
source ip address: 192.168.0.168
file timestamp=2016-03-05 14:31:53
file size=25
file crc32=1091987108
file url: http://192.168.0.168/group1/M00/00/00/ezlCY1bafVn06_1qAAAAGUEWZqQ75_big.html
然而在本地除錯的時候卻提示連線不上,java程式碼如下:
package com.eric.core.resource.fastdfs;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;

import org.apache.log4j.Logger;
import org.csource.common.MyException;
import org.csource.common.NameValuePair;
import org.csource.fastdfs.ClientGlobal;
import org.csource.fastdfs.ProtoCommon;
import org.csource.fastdfs.StorageClient;
import org.csource.fastdfs.StorageServer;
import org.csource.fastdfs.TrackerServer;

import com.eric.utils.FileUtil;

/**
 * FastDFS功能呼叫類
 * 
 */
public class FastDFS {

	private static Logger log = Logger.getLogger(FastDFS.class);

	private static final String FAST_DFS_CONF_FILE = FastDFS.class.getResource("/").getPath() + "/fdfs_client.conf";

	static {
		try {
			// 初始化配置檔案
			ClientGlobal.init(FAST_DFS_CONF_FILE);
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		} catch (MyException e) {
			e.printStackTrace();
		}
	}

	/**
	 * 獲取儲存伺服器連線
	 * 
	 * @return
	 * @throws IOException
	 */
	private static StorageClient getStorageClient() throws IOException {

		// 建立tracker server 的連線
		/*
		 * TrackerGroup tg = new TrackerGroup( new InetSocketAddress[] { new
		 * InetSocketAddress( TRACKER_SERVER_IP, TRACKER_SERVER_PORT) });
		 */

		// TrackerClient tc = new TrackerClient();
		TrackerServer ts = ClientGlobal.getG_tracker_group().getConnection();
		if (ts == null) {
			System.out.println("getConnection return null");
			return null;
		}

		// 建立儲存伺服器的連線
		StorageServer ss = null;// tc.getStoreStorage(ts);
		/*
		 * if (ss == null) { System.out.println("getStoreStorage return null");
		 * return null; }
		 */

		// 建立儲存客戶端
		StorageClient sc = new StorageClient(ts, ss);

		/* for test only */
		// System.out.println("active test to storage server: " +
		// ProtoCommon.activeTest(ss.getSocket()));
		// ss.close();
		/* for test only */
		// System.out.println("active test to tracker server: " +
		// ProtoCommon.activeTest(ts.getSocket()));
		// ts.close();

		/* for test only */
		System.out.println("active test to storage server: " + ProtoCommon.activeTest(ss.getSocket()));
		ss.close();
		/* for test only */
		System.out.println("active test to tracker server: " + ProtoCommon.activeTest(ts.getSocket()));
		ts.close();

		return sc;
	}

	/**
	 * 上傳檔案
	 * 
	 * @return
	 */
	public static String[] uploadFile(String fileName, String fileExt, byte[] contents) {
		try {
			if (fileName == null || contents == null) {
				System.out.println("Upload file[" + fileName + "] is null");
				return null;
			}

			long startTime = System.currentTimeMillis();
			System.out.println("Upload file[" + fileName + "] startTime::" + startTime);

			// TrackerClient tracker = new TrackerClient();
			TrackerServer trackerServer = ClientGlobal.getG_tracker_group().getConnection();
			StorageServer storageServer = null;
			StorageClient client = new StorageClient(trackerServer, storageServer);

			NameValuePair[] meta_list = new NameValuePair[1];
			meta_list[0] = new NameValuePair("filename", fileName);
			String[] fileInfo = client.upload_file(contents, fileExt, meta_list);

			System.out.println("Upload file[" + fileName + "] ok");
			System.out.println(fileInfo[0]);// 檔案儲存所在的組 如:group1 group2等
			System.out.println(fileInfo[1]);// 檔案在伺服器上的路徑及檔名
			// 如:M00/00/00/eWXds1DJpzCASX0oAAAAA4i3nNI382.txt

			long endTime = System.currentTimeMillis();
			System.out.println("Upload file[" + fileName + "] endTime::" + endTime);

			/* for test only */
			// System.out.println("active test to storage server: " +
			// ProtoCommon.activeTest(storageServer.getSocket()));
			// storageServer.close();
			/* for test only */
			// System.out.println("active test to tracker server: " +
			// ProtoCommon.activeTest(trackerServer.getSocket()));
			// trackerServer.close();

			return fileInfo;
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		} catch (MyException e) {
			e.printStackTrace();
		}
		return null;
	}

	/**
	 * 刪除檔案
	 * 
	 * @param groupName
	 * @param fileName
	 * @return
	 */
	public static Integer deleteFile(String groupName, String fileName) {
		try {
			long startTime = System.currentTimeMillis();
			System.out.println("Delete file[" + fileName + "] startTime::" + startTime);

			// 建立儲存客戶端
			// StorageClient sc = getStorageClient();

			// 建立tracker server 的連線
			// TrackerClient tc = new TrackerClient();
			TrackerServer ts = ClientGlobal.getG_tracker_group().getConnection();
			if (ts == null) {
				System.out.println("getConnection return null");
				return null;
			}

			// 建立儲存伺服器的連線
			StorageServer ss = null;// tc.getStoreStorage(ts);

			// 建立儲存客戶端
			StorageClient sc = new StorageClient(ts, ss);

			Integer x = sc.delete_file(groupName, fileName);

			System.out.println("Delete file[" + fileName + "] ok");

			long endTime = System.currentTimeMillis();
			System.out.println("Delete file[" + fileName + "] endTime::" + endTime);

			/* for test only */
			System.out.println("active test to storage server: " + ProtoCommon.activeTest(ss.getSocket()));
			ss.close();
			/* for test only */
			System.out.println("active test to tracker server: " + ProtoCommon.activeTest(ts.getSocket()));
			ts.close();

			return x;
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		} catch (MyException e) {
			e.printStackTrace();
		}
		return 0;
	}

	/**
	 * 下載檔案
	 * 
	 * @param groupName
	 * @param fileName
	 * @return
	 */
	public static byte[] downloadFile(String groupName, String fileName) {
		try {
			long startTime = System.currentTimeMillis();
			System.out.println("Download file[" + fileName + "] startTime::" + startTime);

			// 建立儲存客戶端
			// StorageClient sc = getStorageClient();

			// 建立tracker server 的連線
			// TrackerClient tc = new TrackerClient();
			TrackerServer ts = ClientGlobal.getG_tracker_group().getConnection();
			if (ts == null) {
				System.out.println("getConnection return null");
				return null;
			}

			// 建立儲存伺服器的連線
			StorageServer ss = null;// tc.getStoreStorage(ts);

			// 建立儲存客戶端
			StorageClient sc = new StorageClient(ts, ss);

			byte[] localfileByteArr = sc.download_file(groupName, fileName);

			System.out.println("Download file[" + fileName + "] ok");

			long endTime = System.currentTimeMillis();
			System.out.println("Download file[" + fileName + "] endTime::" + endTime);

			/* for test only */
			System.out.println("active test to storage server: " + ProtoCommon.activeTest(ss.getSocket()));
			ss.close();
			/* for test only */
			System.out.println("active test to tracker server: " + ProtoCommon.activeTest(ts.getSocket()));
			ts.close();

			return localfileByteArr;
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		} catch (MyException e) {
			e.printStackTrace();
		}
		return null;
	}

	public static void main(String[] args) {
		try {

			String fileName = "test";
			String fileExt = "txt";
			File file = new File("D:\\temp\\test.txt");
			uploadFile(fileName, fileExt, FileUtil.getBytesFromFile(file));

		} catch (IOException e) {
			e.printStackTrace();
		}
	}

}

執行main方法時報錯:

java.net.ConnectException: Connection refused: connect
at java.net.DualStackPlainSocketImpl.waitForConnect(Native Method)
at java.net.DualStackPlainSocketImpl.socketConnect(DualStackPlainSocketImpl.java:75)
at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:339)
at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:200)
at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:182)
at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:157)
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:391)
at java.net.Socket.connect(Socket.java:579)
at org.csource.fastdfs.TrackerGroup.getConnection(TrackerGroup.java:47)
at org.csource.fastdfs.TrackerGroup.getConnection(TrackerGroup.java:72)
at com.eric.core.resource.fastdfs.FastDFS.uploadFile(FastDFS.java:107)
at com.eric.core.resource.fastdfs.FastDFS.main(FastDFS.java:257)



解決的辦法:

storage的tracker_server地址必須是外網地址,重啟FastDFS就好了。

歡迎掃碼加入Java高知群交流


相關推薦

Fastdfs客戶連線超時解決方案

歡迎掃碼加入Java高知群交流 Linux伺服器上安裝好的FastDFS之後,在伺服器上測試上傳是沒問題的: /usr/local/bin/fdfs_test /etc/fdfs/client.conf upload a.html 返回的資訊如下: This is

Restlet 客戶連線超時問題解決

使用Restlet進行同步請求,有時可能處理的時間會很長所以需要客戶端進行較長時間的等待。從API中查得客戶端的設定方式如下: ClientResource client = new ClientResource(new Context

“請在微信客戶開啟連結”解決方案

當我們將微信頁面地址複製到電腦自帶的瀏覽器上開啟時候就會提示“請在微信客戶端開啟連結”如圖所示:   百度上很多都是告訴我們用什麼抓包工具破解什麼的,結果呢沒 luan用!這給我們開發人員除錯帶來了諸多不便。下面我教大家如何解決: 1.下載微信開發者工具:微信開發者工具(

Windows安裝MySql服務詳細步驟講解以及相關客戶連線問題解決方法

# Windows安裝MySql服務的相關問題 MySql服務的安裝小總結,以及服務安裝成功,但是使用DOS命令時,無論輸入什麼命令,都會有報錯提示"ERROR 1820 (HY000): You must reset your password using A

dbcp資料庫連線超時解決方案

1.  問題 Could not open Hibernate Session for transaction; JDBC begin failed 2.  解決方案 MySQL 的預設設定下,當一個連線的空閒時間超過8小時後,MySQL 就會斷開該連線,而 c3p0 連線

客戶連線伺服器,配置出錯“連線超時”或者“無監聽程式”解決方法

這兩天在進行Oracle的客戶端配置,伺服器OS為Windows XP 64,客戶端OS為Win7 64,oracle版本為11.2。 先說下伺服器端自己的疑惑,由於自己是新手,很多都不明白是怎麼個回事。 1)關於服務端監聽程式配置時候的SID設定 我在建立資料庫的時候,設定

Oracle 11g 客戶連線 12g 服務,程式啟動報 ORA-28040 的解決

客戶端:11.1.0 服務端:12.1.0 Java 程式啟動時報錯: org.apache.commons.dbcp.SQLNestedException: Cannot create Poolabl

如何解決客戶連線不上Linux上的redis的問題

第一步:檢視你的redis 伺服器是否開啟 ps -ef |grep -i redis第二部:檢查你的redis.conf 檔案是否有問題        如繫結的ip是否註釋        6379埠是否開啟        保護模式是否解除        等等.......這

Sql2008 配置遠端連線客戶連線不上的解決方法

將"客戶端協議"的"TCP/IP"也修改為“Enabled” 配置完成,重新啟動SQL Server 2008。此時應該可以使用了,但是還是要確認一下防火牆。開啟防火牆設定。將SQLServr.exe(C:\Program Files\Microsoft SQL Server\MSSQL10.SQLEX

關於VMware ESX Server客戶連線不上等問題的解決

crond (pid 9701) is running... Chain INPUT (policy ACCEPT 9169 packets, 4606K bytes)  pkts bytes target     prot opt in     out     source               

客戶關閉,伺服器SocketException異常解決方案

已親測(伺服器端不完整,關鍵處已寫,請模擬者自行補充)。(伺服器端與客戶端程式碼都是用執行緒) 解析:通過R,伺服器端判斷客戶端是來請求連結還是做其他事情。 當客戶端傳送R+ 使用者名稱時 伺服器端會對使用者名稱進行儲存,然後給客戶端傳送連線成功訊息。 當客戶端傳送R+關閉

0512日重點:淘寶的H5手機自適應解決方案:Flexible

自動獲取 手機端 issue 解決方案 target 解決 flex get bsp 參考文檔: https://github.com/amfe/lib-flexible https://github.com/amfe/article/issues/17 自我總結:F

iOS客戶節日換膚方案探究

named 普通模式 ani chang theme 1.5 static 解析 .json 轉自:https://www.ianisme.com的博客 一、前言: tip: 本來這篇文章在聖誕節就已經準備好了,但是由於種種原因一直沒有寫完,今天將它寫出來,也算是2018

移動自適應解決方案

size 解決方案 sans key ant htm 自適應 alc 解決 http://dudodo.cc/2017/06/01/%E7%A7%BB%E5%8A%A8%E7%AB%AF%E8%87%AA%E9%80%82%E5%BA%94%E8%A7%A3%E5%86%B

Linux下l2tp客戶配置並解決pppd斷線問題

不為 dead minutes 根據 1.4 安裝 signal 未能 請求 1.安裝客戶端軟件使用xl2tpd,pppyum install -y xl2tpd ppp 2.配置xl2tpd vim /etc/xl2tpd/xl2tpd.conf 最下方追加下面代碼 [l

ajax 請求成功,但是後臺feigin請求超時解決方案

== class 技術分享 pre lee sun handler cati try ========後臺請求數據時間較長,報feigin超時錯誤====== fegin報錯如下: feign.RetryableException: Read timed out exe

Spring Boot 整合 FastDFS 客戶

原文地址:Spring Boot 整合 FastDFS 客戶端 部落格地址:http://www.extlight.com 一、前言 前兩篇介紹整體上介紹了通過 Nginx 和 FastDFS 的整合來實現檔案伺服器。但是,在實際開發中對圖片或檔案的操作都是通過應用程式來完成的,因此,本篇將介紹

003.FTP客戶連線

一 命令列連線 注意: 1:命令列連線不支援目錄下載,使用mget也只會將目錄下檔案下載,不會下載目錄本身。 2:命令列連線不支援斷點續傳。 1 ftp [服務端IP] 2 -help #獲取幫助 3 -get #下載 4 -mget #下載一批檔案 5 -put #上傳

dubbo multicast 連線失敗解決方案

一、異常資訊 Exception in thread "main" com.alibaba.dubbo.rpc.RpcException: Failed to invoke the method sayHello in the service com.demo.service.DemoSer

PG客戶連線伺服器報Connection refused (0x0000274D/10061) 的問題分析

C:\Users\Administrator>psql -h 192.168.80.189 -U highgo -p 5899 psql: 無法聯接到伺服器: Connection refused (0x0000274D/10061)