linux下的TCP小程式

2021-06-18 00:02:00 字數 2988 閱讀 3631

服務端是用多執行緒寫的併發伺服器,比較簡單。

功能:1.  服務端執行後,即監聽指定的埠。允許多個連線併發執行

2.  服務端接收到客戶端請求後,根據客戶端傳過來的指令完成特定任務:

a)         向客戶端傳送服務端所在機器的當前時間

b)        向客戶端傳送服務端所在機器的名稱

c)         向客戶端傳送當前連線的所有客戶端資訊

d)        其它(向客戶端傳送鍵盤輸入的內容)

3.  客戶端執行後,可以執行以下任務:

a)         連線到指定位址和埠的服務端

b)        斷開與服務端的連線

c)         請求服務端給出當前時間

d)        請求服務端給出其機器的名稱

e)         請求服務端給出當前連線的所有客戶端資訊(編號、ip位址、埠等)

f)         給其他客戶端傳送鍵盤輸入的內容

g)        退出客戶端程式

h)        其它(向伺服器端傳送鍵盤輸入的內容)

客戶端:

#include #include #include #include #include #include #include int main(int argc,char *argv)

//獲得輸入的埠

port=atoi(argv[2]);

//建立套節字用於客戶端的連線

connect_fd=socket(pf_inet,sock_stream,0);

if(connect_fd<0)

//填充關於伺服器的套節字資訊

memset(&srv_addr,0,sizeof(srv_addr));

srv_addr.sin_family=af_inet;

srv_addr.sin_addr.s_addr=inet_addr(argv[1]);

srv_addr.sin_port=htons(port);

//連線伺服器,如果連線失敗 ret==-1,結束程式

ret=connect(connect_fd,(struct sockaddr *)&srv_addr,sizeof(srv_addr));

if(ret==-1)

memset(snd_buf,0,1024);

//成功連線伺服器

while(1)

len=read(connect_fd,snd_buf,1024);//如果伺服器發來資訊,則讀取,否則等待。。

if(len>0)

printf("message form server(%d): %s\n",len,snd_buf);//列印從伺服器收到的資訊

if(snd_buf[0]=='@')//@為退出字元。 跳出迴圈

break;

} close(connect_fd);//斷開與伺服器的連線。

return 0;

}

服務端:

#include #include #include #include #include #include #include #include #include #include #include #include #include struct sockaddr_in clt_addr;

struct sockaddr_in srv_addr;

//執行緒執行函式負責讀寫

void *thr_fn(void *arg)

else if(recv_buf[0]== '#')//host message

lens=strlen(uts.nodename);

char* hostdate=uts.nodename;

printf("message from client(%d): %s\n",new_fd,recv_buf);

write(new_fd,hostdate,lens);

}else if(recv_buf[0]== '$')

else

//伺服器向客戶端發資訊

printf("please input char:");

fgets(snd_buf,1024,stdin);

write(new_fd,snd_buf,strlen(snd_buf));

printf("\n");

} close(new_fd);

return 0;

}int main(int argc,char *argv)

//埠的字元轉換

port=atoi(argv[1]);

//建立套接字用於伺服器的監聽

listen_fd=socket(pf_inet,sock_stream,0);

if(listen_fd<0)

memset(&srv_addr,0,sizeof(srv_addr));

//填充伺服器資訊

srv_addr.sin_family=af_inet;

srv_addr.sin_addr.s_addr=htonl(inaddr_any);

srv_addr.sin_port=htons(port);

//將伺服器和套節字繫結

ret=bind(listen_fd,(struct sockaddr *)&srv_addr,sizeof(srv_addr));

if(ret==-1)

//設定連線5個客戶端

ret=listen(listen_fd,5);

if(ret==-1)

//對每個連線來的客戶端建立乙個執行緒,單獨與其進行通訊 ,首先呼叫read函式讀取客戶端傳送來的資訊

while(1)

else

}if((pthread_create(&tid,null,thr_fn,&com_fd))==-1)//多執行緒呼叫 ,跳到thr_fn函式

}return 0;

}

Linux下的進度條小程式

乙個簡單的進度條需要兩個屬性 最大 最小範圍和步長。例如,建立乙個範圍為0到100的載入進度條,把進度條初始為0,當載入乙個資源的時候用單位長度來讓進度條前進乙個步長。1 當進度條前進時,它都會重畫自身 也就是每次從最左端開始顯示比上一次多乙個步長,就有了動態效果 那麼就需要執行一次回車,讓游標回到...

Linux下UART串列埠的測試小程式

include include include include include define baudrate b115200 define uart device dev ttys3 define false 1 define true 0 brief 設定串列埠通訊速率 param fd 型別 ...

Linux下的進度條小程式

首先,我們對makefile進行了解 make le定義了一系列的規則來指定,哪些檔案需要先編譯,哪些檔案需要後編譯,哪些檔案需要重新編譯,甚至於進行更複雜的功能操作。make le就像乙個shell指令碼 樣,其中也可以執行作業系統的命令。makefile中包含依賴關係和依賴方法。當我們建立乙個t...