在伺服器怎麼寫程序
A. 怎麼在伺服器上運行寫的java程序
1.先安裝j2sdk
我安裝路徑是:D:\Program Files\Java\j2sdk
2.再安裝eclipse
Eclipse是綠色軟體,不需要安裝,把下載回來的eclipse壓縮包解壓就可以了
我安裝的路徑是:D:\Program Files\Java\eclipse
3.安裝tomcat
下載回來的是一安裝文件,按照安裝提示進行就可以了
我安裝的路徑是:D:\Program Files\Java\Tomcat
4.安裝eclipse插件
中文包
直接將壓縮包NLpack-eclipse-SDK-3.0.x-win32內features和plugins兩文件夾內的內容解壓到eclipse文件夾內同名文件夾就可以了。
Tomcat插件
將壓縮包tomcatPluginV3解壓,把plugins文件夾內的內容解壓到eclipse文件夾內同名文件夾就可以了。
三.環境配置
1.系統環境變數配置
右擊「我的電腦」->高級->環境變數,
設置JAVA_HOME變數指向其安裝的目錄「D:\Program Files\Java\j2sdk」;
TOMCAT_HOME變數指向其安裝的目錄「D:\Program Files\Java\Tomcat」;
PATH變數中含有「%JAVA_HOME%\bin;」;
CLASSPATH變數含有「%JAVA_HOME%\lib\tools.jar;」;
2.eclipse中java運行環境的配置
在eclipse主窗口中,「窗口」->首選項->java->已安裝的JRE,選我們已經安裝的j2sdk
3. 配置Sysdeo Tomcat 插件
在eclipse主窗口中,「窗口」->首選項->tomcat,tomcat version 選 version 5.x(我們安裝的版本),tomcat home 處填我們安裝tomcat的路徑,這里就是D:\Program Files\Java\Tomcat。
切換到Advanced選項,在tomcat base處再填我們安裝tomcat的路徑,這里就是D:\Program Files\Java\Tomcat。
切換到JVM Setting選項,確定jre是你已經安裝的j2sdk版本,我們這里選j2sdk。
切換到Tomcat Manger App,為管理界面增加一個用戶。
最後按應用按鈕,然後在確定。
B. 如何用Web伺服器編寫網站程序
選好語言`~ asp/php/jsp/html
編好網站, 部署到web伺服器, 輸入伺服器ip和埠, ok
C. 如何用網頁語言編寫一個伺服器關機程序
//
引入必要的命名空間
using
System;
using
System.Collections.Generic;
using
System.ComponentModel;
using
System.Data;
using
System.Drawing;
using
System.Text;
using
System.Windows.Forms;
using
System.Runtime.InteropServices;
//
提供DllImport等特性,是P/Invoke的關鍵
namespace
test
{
public
partial
class
Form1
:
Form
{
public
Form1()
{
InitializeComponent();
}
//
這個結構體將會傳遞給API。使用StructLayout(...特性,確保其中的成員是按順序排列的,C#編譯器不會對其進行調整。
[StructLayout(LayoutKind.Sequential,
Pack
=
1)]
internal
struct
TokPriv1Luid
{
public
int
Count;
public
long
Luid;
public
int
Attr;
}
//
以下使用DllImport特性導入了所需的Windows
API。
//
導入的方法必須是static
extern的,並且沒有方法體。調用這些方法就相當於調用Windows
API。
[DllImport("kernel32.dll",
ExactSpelling
=
true)]
internal
static
extern
IntPtr
GetCurrentProcess();
[DllImport("advapi32.dll",
ExactSpelling
=
true,
SetLastError
=
true)]
internal
static
extern
bool
OpenProcessToken(IntPtr
h,
int
acc,
ref
IntPtr
phtok);
[DllImport("advapi32.dll",
SetLastError
=
true)]
internal
static
extern
bool
LookupPrivilegeValue(string
host,
string
name,
ref
long
pluid);
[DllImport("advapi32.dll",
ExactSpelling
=
true,
SetLastError
=
true)]
internal
static
extern
bool
AdjustTokenPrivileges(IntPtr
htok,
bool
disall,
ref
TokPriv1Luid
newst,
int
len,
IntPtr
prev,
IntPtr
relen);
[DllImport("user32.dll",
ExactSpelling
=
true,
SetLastError
=
true)]
internal
static
extern
bool
ExitWindowsEx(int
flg,
int
rea);
//
以下定義了在調用WinAPI時需要的常數。這些常數通常可以從Platform
SDK的包含文件(頭文件)中找到
internal
const
int
SE_PRIVILEGE_ENABLED
=
0x00000002;
internal
const
int
TOKEN_QUERY
=
0x00000008;
internal
const
int
TOKEN_ADJUST_PRIVILEGES
=
0x00000020;
internal
const
string
SE_SHUTDOWN_NAME
=
"SeShutdownPrivilege";
internal
const
int
EWX_LOGOFF
=
0x00000000;
internal
const
int
EWX_SHUTDOWN
=
0x00000001;
internal
const
int
EWX_REBOOT
=
0x00000002;
internal
const
int
EWX_FORCE
=
0x00000004;
internal
const
int
EWX_POWEROFF
=
0x00000008;
internal
const
int
EWX_FORCEIFHUNG
=
0x00000010;
//
通過調用WinAPI實現關機,主要代碼再最後一行ExitWindowsEx,這調用了同名的WinAPI,正好是關機用的。
private
static
void
DoExitWin(int
flg)
{
bool
ok;
TokPriv1Luid
tp;
IntPtr
hproc
=
GetCurrentProcess();
IntPtr
htok
=
IntPtr.Zero;
ok
=
OpenProcessToken(hproc,
TOKEN_ADJUST_PRIVILEGES
|
TOKEN_QUERY,
ref
htok);
tp.Count
=
1;
tp.Luid
=
0;
tp.Attr
=
SE_PRIVILEGE_ENABLED;
ok
=
LookupPrivilegeValue(null,
SE_SHUTDOWN_NAME,
ref
tp.Luid);
ok
=
AdjustTokenPrivileges(htok,
false,
ref
tp,
0,
IntPtr.Zero,
IntPtr.Zero);
ok
=
ExitWindowsEx(flg,
0);
}
private
void
button1_Click(object
sender,
EventArgs
e)
{
if
(radioButton1.Checked
==
true)
{
DoExitWin(EWX_SHUTDOWN);
}
else
{
Application.Exit();
}
//MessageBox.Show("2");
}
}
}
D. 怎麼在linux伺服器上運行程序
方法有很多,這里主要列舉兩種。假如要使pso在linux伺服器後台執行。當客戶端關機後重新登入伺服器後繼續查看本來在終端輸出的運行結果。
# ./pso > pso.file & #直接在命令後加上&即可
解釋:將pso直接放在後台運行,並把終端輸出存放在當前目錄下的pso.file文件中。當客戶端關機後重新登陸伺服器後,直接查看pso.file文件就可看執行結果(命令:#cat pso.file )。
有些程序即使使用 & 結尾,如果終端關閉,那麼程序也會被關閉。為了能夠使程序能始終在後台運行,需要使用nohup這個命令。
方法2在終端輸入命令:
# nohup ./pso > pso.file &
解釋:nohup就是不掛起的意思,將pso直接放在後台運行,並把終端輸出存放在當前目錄下的pso.file文件中。當客戶端關機後重新登陸伺服器後,直接查看pso.file文件就可看執行結果(命令:#cat pso.file )。
三、常用任務管理命令
# jobs //查看任務,返回任務編號n和進程號
# bg %n //將編號為n的任務轉後台運行
# fg %n //將編號為n的任務轉前台運行
# ctrl+z //掛起當前任務
# ctrl+c //結束當前任務
# tail -f logs.txt //可以實時查看日誌文件
註:如果要使在前台執行任務放到後台運行,則先要用ctrl+z掛起該任務,然後用bg使之後台執行。
E. 如何用python編寫一個程序,在伺服器後台運行,每天刪除一些文件
首先利用
os.remove() will remove a file.
os.rmdir() will remove an empty directory.
shutil.rmtree() will delete a directory and all its contents.
寫你的模塊
利用Linux crontab定時任務運行這個模塊。
還可以以守護進程的方式運行你的腳本。nohup <程序名> &
F. 如何用自己的電腦做伺服器,用java語言寫伺服器程序
你指的伺服器程序是指B/S(瀏覽器/伺服器)
還是C/S(客戶端/伺服器)模式啊,不過不管你想寫那種服務端程序首先都是要先安裝JDK的,然後才開始開發,如果是B/S可以使用tomcat作為伺服器,C/S的話就要自己寫了
G. 如何實現在Linux下創建服務程序
Linux系統能提供強大可靠的網路服務,並有管理程序對服務進行管理。例如我們熟悉的Web、FTP和電子郵件等,它們既可以單獨運行,也可以被守護進程inetd調用,而且運行得都非常好。但我們不能僅停留在贊嘆中,下面就給出兩個服務程序程序和一個客戶程序的例子,介紹服務程序和客戶程序之間是如何溝通的。另外還要編輯配置一些文件,讓服務程序也能接受服務管理程序管理。
這兩個服務程序功能相同,但一個是獨立服務程序,另一個是被inetd調用的服務程序。這是TCP/IP網路服務的兩大類,這里將兩個程序放在一起是為了比較程序結構和運行方式。兩服務程序都在Red Hat Linux 7.1和TurboLinux 7.0上調試通過。
獨立伺服器
TCP和UDP是兩大TCP/IP數據傳輸方式,套介面是建立伺服器客戶機連接的機制,首先介紹它們建立通信聯系的過程,然後給出一個TCP服務程序例子。
1.TCP套介面通信方式
對於TCP伺服器端,服務程序首先調用建立套介面的函數socket(),然後調用綁定服務IP地址和協議埠號函數bind()。綁定成功後調用被動監聽函數listen()等待客戶連接,還要調用獲取連接請求函數accept(),並一直阻塞到客戶連接請求的到達,這個函數獲取客戶機IP地址和協議埠號。
對於TCP客戶端,客戶程序啟動後後調用建立套介面函數socket(),然後調用連接函數connect(),此函數與伺服器通過三次握手建立連接。
伺服器和客戶機建立連接後,就可以使用讀函數read()和寫函數write()收發數據了。數據交換完成後便各自調用關閉套介面函數close()刪除套介面。TCP套介面通信方式見圖1所示。
圖1 TCP套介面通信方式
2.UDP套介面通信方式
UDP程序與TCP的區別是無需建立連接。伺服器首先啟動,然後等待用戶請求。客戶機啟動後便直接向伺服器請求服務,伺服器接到請求後給出應答。
對於UDP伺服器端,服務程序首先調用套介面函數socket(),然後調用綁定IP地址和協議埠號函數bind()。之後調用函數recvfrom()接收客戶數據,調用sendto()向客戶發送數據。
對於UDP客戶端,客戶機程序啟動後調用套介面函數socket(),然後調用sendto()向伺服器發送數據,調用recvfrom()接收伺服器數據。
雙方數據交換成功後,各自調用關閉套介面函數close()關閉套介面。UDP套介面通信方式見圖2所示。
圖2 UDP套介面通信方式
下面給出獨立服務程序的例子。這個程序雖然簡單,但是與復雜程序有著相同的結構。
//程序名:server.c
//功能:伺服器從客戶機讀入一個字元,並將排在此字元後面的字元回送客戶機
//伺服器埠:9000
#include "sys/types.h"
#include "sys/socket.h"
#include "stdio.h"
#include "netinet/in.h"
#include "arpa/inet.h"
#include "unistd.h"
int main()
{
int pid; //用於存放fork()執行結果
int server_sockfd,client_sockfd; //用於伺服器和客戶機套介面描述符
int bind_flag,listen_flag; //用於存放bind()和listen()執行結果
int server_address_length,client_address_length; //作為伺服器客戶機地址長變數
struct sockaddr_in server_address; //作為伺服器地址結構變數(含地址和埠)
struct sockaddr_in client_address; //作為客戶機地址結構變數(含地址和埠)
if((pid=fork())!=0) //用fork()產生新進程
exit(0) ;
setsid() ; //以子進程開始下面的程序
函數socket(),創建一個套介面,成功則返回套介面描述符。
server_sockfd=socket(AF_INET,SOCK_STREAM,0);
if(server_sockfd<0)
{
printf(「socket error /n」);
exit(1);
}
server_address.sin_family=AF_INET;
函數htonl()用於將32位主機位元組順序轉換為網路位元組順序,其中參數INADDR_ANY表示任何IP地址。
server_address.sin_addr.s_addr=htonl(INADDR_ANY);
函數htons()用於將16位主機位元組順序轉換為網路位元組順序,其中的參數是綁定的埠號,讀者可根據環境自行改動,目的是不與其它服務埠沖突。
server_address.sin_port=htons(9000);
server_address_length=sizeof(server_address);
函數bind()用於綁定本地地址和服務埠號,若調用成功返回值為0。
bind_flag=bind(server_sockfd,/
(struct sockaddr *)&server_address,/
server_address_length);
if(bind_flag<0)
{
printf(「bind error /n」);
exit(1);
}
函數listen(),指明伺服器的隊列長度,被動等待客戶連接,調用成功返回值為0。
listen_flag=listen(server_sockfd,5);
if(listen_flag<0)
{
printf(「listen error /n」);
exit(1);
}
while(1)
{
char ch;
函數accept()等待和獲取用戶請求,為每個新連接請求創建一個新的套介面,調用成功返回新套介面描述符。
client_sockfd=accept(server_sockfd,/
(struct sockaddr *)&client_address,/
&client_address_length);
函數read()和write()用於在伺服器和客戶機之間傳送數據,調用成功返回讀和寫的位元組數。
函數close(),用於程序使用完一個套介面後關閉套介面,調用成功返回值0。其中的參數為accept()創建的套介面的描述符client_sockfd。
read(client_sockfd,&ch,1);
printf(「cli_ch=%c」,ch);
ch++;
write(client_sockfd,&ch,1);
close(client_sockfd);
}
}
程序完成後就可以使用命令進行編譯。在命令行中輸入「gcc -o server server.c」,將server.c編譯成可執行程序server,這時便可用客戶程序進行測試。在命令行執行「./server」啟動服務程序,執行「netstat -na」查看有無server的服務埠。如果存在,則執行下面編寫的客戶程序「./client」。不過這僅是手工啟動的方法,下面給出用服務管理程序管理server程序的方法。只要在目錄/etc/rc.d/init.d下放入服務程序的腳本就能被服務程序讀到。在命令行執行「touch server」創建文件server,並將文件屬性改成可執行。在管理程序中並不能看到此服務名,腳本文件必須有一些結構才能被管理程序認為是服務程序腳本。
為了減少工作量,拷貝/etc/rc.d/init.d下腳本httpd,將拷貝腳本名命名為server,然後對其編輯。
(1)執行「cp httpd server」。
(2)用文本編輯器vi(其它編輯器亦可)將server打開進入編輯狀態。首先用字元串server替換httpd。然後找到daemon server行,如果編寫的程序放在變數PATH目錄中,不需要修改此行;如果把服務程序放在其它目錄中,就要寫服務的全路徑。例如程序在/root的目錄中,就要寫成daemon /root/server,還要刪除「rm -f /var/run/server.pid」這一行。
(3)執行「chmod 755 server」,將server屬性設定為可執行。
此時就可以用chkconfig、ntsysv等工具,在希望的運行級中增加這個新服務程序,然後測試客戶機與伺服器能否通信。
被xinetd調用的服務程序
在Linux系統中,有很多服務是被xinetd(較早版本使用的是inetd)超級守護伺服器啟動的。其實凡是基於TCP和UDP的服務都可使用超級守護進程啟動,只是在服務量很大影響效率的情況下不被採用。
1.依賴xinetd啟動的服務建立通信過程
為了與獨立伺服器程序比較,我們看一下依賴xinetd的伺服器是如何啟動的。
(1)xinetd啟動時讀取/etc/xinetd目錄中的文件(早期版本為/etc/inetd文件),根據其中的內容給所有允許啟動的服務創建一個指定類型的套介面,並將套介面放入select()中的描述符集合中。
(2)對每個套介面綁定bind(),所用的埠號和其它參數來自/etc/xinetd目錄下每個服務的配置文件。
(3)如果是TCP套介面就調用函數listen(),等待用戶連接。如果是UDP套介面,就不需調用此函數。
(4)所有套介面建立後,調用函數select()檢查哪些套介面是活動的。
(5)若select()返回TCP套介面,就調用accept()接收這個連接。如果為UDP,就不需調用此函數。
(6)xinetd調用fork()創建子進程,由子進程處理連接請求。
◆ 子進程關閉所有其它描述符,只剩下套介面描述符。這個套介面描述符對於TCP是accept()返回的套介面,對於UDP為最初建立的套介面。然後子進程連續三次p()函數,將套介面描述符復制到0、1和2,它們分別對應標准輸入、標准輸出和標准錯誤輸出,並關閉套介面描述符。
◆ 子進程查看/etc/xinetd下文件中的用戶,如果不是root用戶,就用調用命令setuid和setgid將用戶ID和組ID改成文件中指定的用戶。
(7)對於TCP套介面,與用戶交流結束後父進程需要關閉已連接套介面。父進程重新處於select()狀態,等待下一個可讀的套介面。
最後調用配置文件中指定的外部服務程序,外部程序啟動後就可與用戶進行信息傳遞了。
2.為xinetd編寫專門的服務程序
除了獨立服務程序能被xinetd啟動外,還可以為xinetd編寫專門的程序。此處的例子程序與上面server.c功能相同。不過兩者的程序區別是很大的,此例的代碼僅相當於上面傳輸數據的部分。我們還將程序名定為server.c,所以不能放在相同目錄中,同名僅是為了和上面程序對照。
#include "unistd.h"
int main()
{
char ch;
read(0,&ch,1);
ch++;
write(1,&ch,1);
}
將程序編譯成可執行文件,並做些設置就可被xinetd啟動。注意不要和上面的獨立服務程序server一起啟動,因為客戶程序寫得比較簡單,訪問的是固定埠,伺服器都設成了相同的埠號。
(1)編輯/etc/services文件,在行末增加一條記錄:
server 9000/tcp
(2)在目錄/etc/xinetd.d下編寫文件server,內容為:
service server
{
disable = no
socket_type = stream
protocol = tcp
wait = no
user = root
server = /home/test/server (此處設置成自己程序所在的目錄)
}
如果使用的是較早版本,則需在/etc/inetd.conf文件中添加下面的行:
server tcp nowait root /path/to/yourdirectory/server
(3)執行/etc/rc.d/initd.d/xinetd restart重新啟動xinetd伺服器。早期版本執行/etc/rc.d/initd.d/inetd restart重新啟動inetd。
(4)執行netstat -an查看有沒有server程序使用的埠號,如果有就可使用下面客戶機程序進行測試了。
客戶機程序
下面就客戶機函數做一簡單介紹。
//程序名client.c
/*功能:從客戶的控制台輸入一個字元,然後將這個字元送到伺服器,並將伺服器返回的字元顯示出來*/
#include "sys/types.h"
#include "sys/socket.h"
#include "stdio.h"
#include "netinet/in.h"
#include "arpa/inet.h"
#include "unistd.h"
int main()
{
int sockfd;//
int address_len;
int connect_flag;
struct sockaddr_in address;
int connect_result;
char client_ch,server_ch;
函數socket()用於建立一個套介面,創建成功返回套介面描述符。
sockfd=socket(AF_INET,SOCK_STREAM,0);
if(sockfd<0)
{
printf(「sockfd error /n」);
}
address.sin_family=AF_INET;
address.sin_addr.s_addr=inet_addr(「192.168.0.1」);/*讀者根據自己環境改成伺服器地址*/
address.sin_port=htons(9000);
address_len=sizeof(address);
函數connect()用於與伺服器建立一個主動連接,調用成功返回值為0。
connect_flag=connect(sockfd,(struct sockaddr *)&address,address_len);
if(connect_flag==-1)
{
perror(「client」);
exit(1);
}
printf(「Input a character :」);
函數scanf()用於從控制台輸入一個字元,並將字元存入client_ch的地址。函數write()和read()用於傳輸數據。函數printf()在客戶機屏幕上顯示伺服器傳回的字元。函數close()關閉套介面。
scanf(「%c」,&client_ch);
write(sockfd,&client_ch,1);
read(sockfd,&server_ch,1);
printf(「character from server : %c/n」,server_ch);
close(sockfd);
exit(0);
}
執行命令「gcc -o client client.c」,將client.c編譯成client。執行「./client」,在程序提示下輸入一個字元,就能看到伺服器傳回的字元。
以上介紹的僅是簡單的例子。平時見到的服務程序遠比它復雜,而且很多是多協議服務程序或是多協議多服務程序。多協議服務程序就是在main()中分別創建供服務的TCP和UDP套介面。為每個服務分別寫出相應程序好處是便於控制,但是這樣每個服務都啟動兩個伺服器,而它們的演算法響應是一樣的,就要耗費不必要的資源,並且出了問題排錯也較困難。多服務是將不同的服務集成在一起由一個程序完成,可用一個數組表示服務,數組中的每一項表示某協議某服務的一種,這樣很容易擴展程序的服務功能。
H. 如何在linux伺服器中運行自己寫的matlab程序
在伺服器上安裝LINUX版的MATLAB,然後在MATLAB下面運行你的MATLAB程序。
I. 如何編寫Web伺服器後台程序
寫個線程類,給個flag當這個類的成員變數!
然後你服務啟動 的時候就調用這個類唄!
把你要做的事情寫在線程類裡面,while(flag)!你想讓它停的時候就把flag設成flase,讓線程結束唄!
J. 問一個關於怎樣寫c#伺服器程序的問題。
這個為什麼要用到socket。。。
這個用socket做難道你准備去把一張出車單拼成一個很長的字元串然後再到client去解析么。。
這個是個典型的C/S應用啊。。
Server端public 出添加出車單,查詢出車單,處理出車單等這樣的介面。然後你可以通過web service或者wcf, .net remoting把這樣的介面作為service發布出來。
然後所有的client通過對應的協議直接去調用server端的方法。。
這樣,所有的人使用client連接同一個server。出車時一個人填寫出車單,client將調用server的api直接添加進資料庫。。 而領導查看的時候調用查詢的api,從server端獲取數據綁定到UI。。
也就是說,所有的資料庫的增刪改查是在server端完成。。而client只涉及簡單的UI行為。。 例如AddOrder, client根據用戶的輸入,從空間獲取值,組織好一個order對象,然後直接調用server端的AddOrder方法,然後Server端處理往資料庫插入的整個過程。
如果你不想深入研究通信協議的話,你可以考慮看看web service ..上手很容易。。