當前位置:首頁 » 操作系統 » 自己開發源碼

自己開發源碼

發布時間: 2024-10-28 03:35:32

A. 采購外包軟體源碼自己開發要注意什麼

1、軟體外包公司的選擇,選擇專業的軟體外包公司合作,建議大家可以通過網路渠道查找挑選軟體外包公司,從軟體公司的注冊年限、公司整體人員規模、公司過往開發案例、相關資質證書、企業口碑等方面綜合評判軟體公司的專業性。
2、不要拆分外包,軟體項目外包分為整體外包和拆分外包,整體外包是指將整個軟體項目外包給同一家公司,軟體的UI及功能編寫由同一家公司完成。
3、建立高效的項目溝通機制,軟體需求採集階段則需要明確開發需求,根據需求設計產品原型,並與客戶確認原型是否滿足客戶的真實需求,項目研發的每一個階段都需要雙方配合,建立良好的溝通機制,才能保障開發出來的軟體是客戶真正需要的。
4、合同簽訂,與外包公司簽署軟體定製開發合同時需要甲乙雙方協商相關條例,合同內容越細致越好,需要有詳細的功能描述、交付時間、付款方式等,避免後期發生糾紛。
5、確定版權歸屬方,雙方需要明確軟體源碼所屬權和知識產權。
6、違約責任,合同中的違約責任是對雙方行為的約束。
7、售後服務。

B. 自己如何做網站,我就是什麼都不會

第一種,自己手工源碼搭建:

1、買域名,必須實名認證,如果國內的伺服器必須ICP備案

2、租伺服器,一般的普通展示類網站1G內存1MB寬頻,40GB硬碟就夠了,如果流量特別大,選擇更高的配置,一般Cenos Linux系統比較多,win系統的比較少;Nginx和Apache的個人建議Nginx,一般企業類,商城類網站源碼php的佔大多數,建議php5.4以上,之前的有些老了

3、添加站點設置域名:你的買域名 2設置根目錄 3設置ftp 4資料庫

4、製作源代碼,幾乎沒有從零開始的,除非你這邊有大量牛人。找些免費開源的改動內容,功能不同選擇不同的系統一般通用系統:PageAdmin 論壇系統:discuz 購物系統:ecshop博客系統:wp,需要授權的系統需要注意授權問題,內容修改一般用deamviewer修改比較方便,如果改動很少,那就用notepad++,註:不要用windows的記事本修改,會出錯,資料庫文件指向一定要設置好。

5、下載xshell,安裝,填寫伺服器ip,密碼,鏈接,上傳源碼到伺服器的根目錄

6、設置域名解析,打開買的域名的管理後台,添加記錄,填寫記錄類型選擇A型,主機記錄寫www,解析線路選擇默認,記錄值輸入伺服器的ip,TTL默認10分鍾

在瀏覽器打開域名,瀏覽網站。

第二種,自己手工一鍵搭建:


  • 第一步:網路搜索菲爾萊斯科技,打開菲爾萊斯科技官網,免費注冊您的賬號,註:(生成的網站二級域名會是:賬號.flspt.com,不想使用二級域名可綁定自己的頂級域名)。

  • 第一種相對繁瑣一些,好處是代碼自己掌握

    第二種代碼自己不掌握,但是建站很快,不需要什麼技術操作。

感覺第二種更適合你

C. 自己開發的源代碼遭遇侵權,我該怎麼辦

這也是很多軟體開發者最頭疼的問題,一旦你把源碼給出去之後就免不了這樣的情況發生,而且即使你有證據證明代碼是你的,維權也十分艱難,起訴更是不靠譜。
一種辦法是你不給源碼,只賣軟體和售後服務,軟體賣出去之後,如果需要修改功能可以以合適的價錢給他們修改軟體,還是不給源碼
如果你的軟體經濟效益比較好,你也可以考慮申請個軟體著作權,雖然軟體寫完你就擁有著作權,但是有一個證書的話,維權起來會方便一些,而且也不貴

D. 如何開發自己的HttpServer-NanoHttpd源碼解讀

現在作為一個開發人員,http server相關的內容已經是無論如何都要了解的知識了。用curl發一個請求,配置一下apache,部署一個web server對我們來說都不是很難,但要想搞清楚這些背後都發生了什麼技術細節還真不是很簡單的。所以新的系列將是分享我學習Http Server的過程。


NanoHttpd是Github上的一個開源項目,號稱只用一個java文件就能創建一個http server,我將通過分析NanoHttpd的源碼解析如何開發自己的HttpServer。Github 地址:https://github.com/NanoHttpd/nanohttpd


在開始前首先簡單說明HttpServer的基本要素:

1.能接受HttpRequest並返回HttpResponse

2.滿足一個Server的基本特徵,能夠長時間運行


關於Http協議一般HttpServer都會聲明支持Http協議的哪些特性,nanohttpd作為一個輕量級的httpserver只實現了最簡單、最常用的功能,不過我們依然可以從中學習很多。


首先看下NanoHttpd類的start函數


[java]view plain

publicvoidstart()throwsIOException{

myServerSocket=newServerSocket();

myServerSocket.bind((hostname!=null)?newInetSocketAddress(hostname,myPort):newInetSocketAddress(myPort));

myThread=newThread(newRunnable(){

@Override

publicvoidrun(){

do{

try{

finalSocketfinalAccept=myServerSocket.accept();

registerConnection(finalAccept);

finalAccept.setSoTimeout(SOCKET_READ_TIMEOUT);

finalInputStreaminputStream=finalAccept.getInputStream();

asyncRunner.exec(newRunnable(){

@Override

publicvoidrun(){

OutputStreamoutputStream=null;

try{

outputStream=finalAccept.getOutputStream();

=tempFileManagerFactory.create();

HTTPSessionsession=newHTTPSession(tempFileManager,inputStream,outputStream,finalAccept.getInetAddress());

while(!finalAccept.isClosed()){

session.execute();

}

}catch(Exceptione){

//,wethrowourownSocketException

//tobreakthe"keepalive"loopabove.

if(!(einstanceofSocketException&&"NanoHttpdShutdown".equals(e.getMessage()))){

e.printStackTrace();

}

}finally{

safeClose(outputStream);

safeClose(inputStream);

safeClose(finalAccept);

unRegisterConnection(finalAccept);

}

}

});

}catch(IOExceptione){

}

}while(!myServerSocket.isClosed());

}

});

myThread.setDaemon(true);

myThread.setName("NanoHttpdMainListener");

myThread.start();

}

1.創建ServerSocket,bind制定埠


2.創建主線程,主線程負責和client建立連接

3.建立連接後會生成一個runnable對象放入asyncRunner中,asyncRunner.exec會創建一個線程來處理新生成的連接。

4.新線程首先創建了一個HttpSession,然後while(true)的執行httpSession.exec。

這里介紹下HttpSession的概念,HttpSession是java里Session概念的實現,簡單來說一個Session就是一次httpClient->httpServer的連接,當連接close後session就結束了,如果沒結束則session會一直存在。這點從這里的代碼也能看到:如果socket不close或者exec沒有拋出異常(異常有可能是client段斷開連接)session會一直執行exec方法。

一個HttpSession中存儲了一次網路連接中server應該保存的信息,比如:URI,METHOD,PARAMS,HEADERS,COOKIES等。

5.這里accept一個client的socket就創建一個獨立線程的server模型是ThreadServer模型,特點是一個connection就會創建一個thread,是比較簡單、常見的socket server實現。缺點是在同時處理大量連接時線程切換需要消耗大量的資源,如果有興趣可以了解更加高效的NIO實現方式。

當獲得client的socket後自然要開始處理client發送的httprequest。


Http Request Header的parse:


[plain]view plain

//Readthefirst8192bytes.

//Thefullheadershouldfitinhere.

//Apache'sdefaultheaderlimitis8KB.

//!

byte[]buf=newbyte[BUFSIZE];

splitbyte=0;

rlen=0;

{

intread=-1;

try{

read=inputStream.read(buf,0,BUFSIZE);

}catch(Exceptione){

safeClose(inputStream);

safeClose(outputStream);

thrownewSocketException("NanoHttpdShutdown");

}

if(read==-1){

//socketwasbeenclosed

safeClose(inputStream);

safeClose(outputStream);

thrownewSocketException("NanoHttpdShutdown");

}

while(read>0){

rlen+=read;

splitbyte=findHeaderEnd(buf,rlen);

if(splitbyte>0)

break;

read=inputStream.read(buf,rlen,BUFSIZE-rlen);

}

}

1.讀取socket數據流的前8192個位元組,因為http協議中頭部最長為8192


2.通過findHeaderEnd函數找到header數據的截止位置,並把位置保存到splitbyte內。


[java]view plain

if(splitbyte<rlen){

inputStream.unread(buf,splitbyte,rlen-splitbyte);

}

parms=newHashMap<String,String>();

if(null==headers){

headers=newHashMap<String,String>();

}

//.

BufferedReaderhin=newBufferedReader(newInputStreamReader(newByteArrayInputStream(buf,0,rlen)));

//

Map<String,String>pre=newHashMap<String,String>();

decodeHeader(hin,pre,parms,headers);


1.使用unread函數將之前讀出來的body pushback回去,這里使用了pushbackstream,用法比較巧妙,因為一旦讀到了header的尾部就需要進入下面的邏輯來判斷是否需要再讀下去了,而不應該一直讀,讀到沒有數據為止

2.decodeHeader,將byte的header轉換為java對象


1.Http協議第一行是Method URI HTTP_VERSION


2.後面每行都是KEY:VALUE格式的header

3.uri需要經過URIDecode處理後才能使用

4.uri中如果包含?則表示有param,httprequest的param一般表現為:/index.jsp?username=xiaoming&id=2


下面是處理cookie,不過這里cookie的實現較為簡單,所以跳過。之後是serve方法,serve方法提供了用戶自己實現httpserver具體邏輯的很好介面。在NanoHttpd中的serve方法實現了一個默認的簡單處理功能。

這個默認的方法處理了PUT和POST方法,如果不是就返回默認的返回值。


parseBody方法中使用了tmpFile的方法保存httpRequest的content信息,然後處理,具體邏輯就不細說了,不是一個典型的實現。


最後看一下發response的邏輯:


sendAsFixedLength(outputStream,pending);

}

outputStream.flush();

safeClose(data);

}catch(IOExceptionioe){

//Couldn'twrite?Nocando.

}

}

發送response的步驟如下:


1.設置mimeType和Time等內容。

2.創建一個PrintWriter,按照HTTP協議依次開始寫入內容

3.第一行是HTTP的返回碼

4.然後是content-Type

5.然後是Date時間

6.之後是其他的HTTP Header

7.設置Keep-Alive的Header,Keep-Alive是Http1.1的新特性,作用是讓客戶端和伺服器端之間保持一個長鏈接。

8.如果客戶端指定了ChunkedEncoding則分塊發送response,Chunked Encoding是Http1.1的又一新特性。一般在response的body比較大的時候使用,server端會首先發送response的HEADER,然後分塊發送response的body,每個分塊都由chunk length 和chunk data 組成,最後由一個0 結束。


9.如果沒指定ChunkedEncoding則需要指定Content-Length來讓客戶端指定response的body的size,然後再一直寫body直到寫完為止。




最後總結下實現HttpServer最重要的幾個部分:

1.能夠accept tcp連接並從socket中讀取request數據

2.把request的比特流轉換成request對象中的對象數據

3.根據http協議的規范處理http request

4.產生http response再寫回到socket中傳給client。

熱點內容
演算法初步高考題 發布:2024-10-28 06:21:16 瀏覽:345
win自帶壓縮 發布:2024-10-28 06:09:59 瀏覽:650
php文件上傳限制 發布:2024-10-28 06:07:42 瀏覽:576
sql如何自定義函數 發布:2024-10-28 06:03:03 瀏覽:542
蘋果帳號如何關閉充值輸入id密碼 發布:2024-10-28 05:54:42 瀏覽:664
怎麼把安卓刷成win10 發布:2024-10-28 05:53:10 瀏覽:248
winzar能解壓rar格式嗎 發布:2024-10-28 05:45:31 瀏覽:892
fanx編程 發布:2024-10-28 05:45:18 瀏覽:561
蘋果7引導式訪問密碼是什麼密碼 發布:2024-10-28 05:39:59 瀏覽:325
ftp如何用edge瀏覽器打開 發布:2024-10-28 05:39:58 瀏覽:34