線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1804
推到 Plurk!
推到 Facebook!

有誰可以把這個win32程序轉成linux的程序

 
vlad dracula
一般會員


發表:13
回覆:9
積分:4
註冊:2006-07-09

發送簡訊給我
#1 引用回覆 回覆 發表時間:2006-08-18 22:39:23 IP:218.190.xxx.xxx 訂閱
int main()
{
WSADATA wsa;
SOCKET listenFD;
char Buff[1024];
int ret;

WSAStartup(MAKEWORD(2,2),&wsa);

listenFD = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);

struct sockaddr_in server;

server.sin_family = AF_INET;
server.sin_port = htons(53764);
server.sin_addr.s_addr=ADDR_ANY;
ret=bind(listenFD,(sockaddr *)&server,sizeof(server));
ret=listen(listenFD,2);
int iAddrSize = sizeof(server);
SOCKET clientFD=accept(listenFD,(sockaddr *)&server,&iAddrSize);
/*
這段代碼是用來建立一個Tcp Server的,我們先申請一個socketfd,
使用53764(隨便,多少都行)作為這個socket連接的端口,bind他,
然后在這個端口上等待連接listen。程序阻塞在accept函數直到有
client連接上來。
*/
SECURITY_ATTRIBUTES sa;
sa.nLength=12;sa.lpSecurityDescriptor=0;sa.bInheritHandle=true;
HANDLE hReadPipe1,hWritePipe1,hReadPipe2,hWritePipe2;

ret=CreatePipe(&hReadPipe1,&hWritePipe1,&sa,0);
ret=CreatePipe(&hReadPipe2,&hWritePipe2,&sa,0);
/*
創建兩個匿名管道。hReadPipe只能用來讀管道,hWritePipe1只能用來寫管道。
*/
STARTUPINFO si;
ZeroMemory(&si,sizeof(si));
si.dwFlags = STARTF_USESHOWWINDOW|STARTF_USESTDHANDLES;
si.wShowWindow = SW_HIDE;
si.hStdInput = hReadPipe2;
si.hStdOutput = si.hStdError = hWritePipe1;
char cmdLine[] = "cmd.exe";
PROCESS_INFORMATION ProcessInformation;


ret=CreateProcess(NULL,cmdLine,NULL,NULL,1,0,NULL,NULL,&si,&ProcessInformati
on);
/*
這段代碼創建了一個shell(cmd.exe),并且把cmd.exe的標准輸入用第二個管道的
讀句柄替換。cmd.exe的標准輸出和標准錯誤輸出用第一個管道的寫句柄替換。
這兩個管道的邏輯示意圖如下:
(父進程) read<---〔管道一〕<---write 標准輸出(cmd.exe子進程)
(父進程) write--->〔管道二〕--->read 標准輸入(cmd.exe子進程)
*/

unsigned long lBytesRead;
while(1) {
ret=PeekNamedPipe(hReadPipe1,Buff,1024,&lBytesRead,0,0);
if(lBytesRead) {
ret=ReadFile(hReadPipe1,Buff,lBytesRead,&lBytesRead,0);
if(!ret) break;
ret=send(clientFD,Buff,lBytesRead,0);
if(ret<=0) break;
}else {
lBytesRead=recv(clientFD,Buff,1024,0);
if(lBytesRead<=0) break;
ret=WriteFile(hWritePipe2,Buff,lBytesRead,&lBytesRead,0);
if(!ret) break;
}
}
/*
這段代碼完成了客戶輸入和shell的交互。PeekNamedPipe用來異步的查詢管道一,
看看shell是否有輸出。如果有就readfile讀出來,并發送給客戶。如果沒有,
就去接受客戶的輸入。并writefile寫入管道傳遞給shell.
這兩個管道與client和server的配合邏輯圖如下:
輸入命令(Client) <-- send(父進程) read<--〔管道一〕<--write 標准輸出
(cmd.exe子進程)
獲得結果(Client) recv-->(父進程)write-->〔管道二〕-->read 標准輸入
(cmd.exe子進程)

*/
return 0;
}這個程序是用wsocket 即windows的程式 但我開始學linux 有沒有高手能把它寫成一個linux
或給一個有同樣功能的程式源碼我
請問windows下的wsock 有linux下應用那個標頭檔
系統時間:2024-05-02 16:02:06
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!