第一篇:學(xué)習(xí)Linux編程哪個好
中國IT職業(yè)教育領(lǐng)先品牌
精品課程 全程面授
學(xué)習(xí)Linux編程哪個好
想知道Linux編程培訓(xùn)哪家好?先來了解一下什么是Linux編程吧!Linux下的網(wǎng)絡(luò)編程指的是socket套接字編程,入門比較簡單。在學(xué)校里學(xué)過一些皮毛,平時就是自學(xué)玩,沒有見識過真正的socket編程大程序,比較遺憾。總感覺每次看的時候都有收獲,但是每次看完了之后,過段時間不看,重新拾起這些知識的時候又要從頭開始,所以,在這里做個筆記也算是做個模板,以后可以直接從某一個階段開始接著玩……
IO復(fù)用之select函數(shù)
select函數(shù)用于IO復(fù)用,它用于監(jiān)視多個文件描述符集合,看規(guī)定時間內(nèi)有沒有事件產(chǎn)生。
int select(int nfds,fd_set *readfds,fd_set *writefds,fd_set *exceptfds,struct timeval *timeout);功能介紹:
該函數(shù)主要的功能是對需要操作的文件描述符集合進行查詢,目標文件描述符中有可以讀,寫或者異常錯誤操作的情況時,會返回一個大于0的整數(shù)值,表示可以對該文件描述符進行操作。select函數(shù)返回0,表示超時;返回-1,表示發(fā)生錯誤;返回大于0的整數(shù)值,表示有符合要求的文件描述事件產(chǎn)生。當不需要監(jiān)視某種文件描述符時,設(shè)置參數(shù)為NULL。參數(shù)說明:
nfds:是一個整型變量,其值是加入到后面三個文件描述符集合中的最大文件描
千鋒教育www.tmdps.cn
中國IT職業(yè)教育領(lǐng)先品牌
精品課程 全程面授
述符的值加1。
readfds:可讀文件描述符集合,通過FD_SET向該文件描述符集合中加入需要監(jiān)視的目標文件描述符,當有符合要求的文件描述符時,select會返回一個大于0的值,同時會把原來集合中的不可讀的文件描述符清掉,如果想在次監(jiān)視可讀文件描述,需要重新FD_SET。
writefds:可寫文件描述符集合,同樣通過FD_SET函數(shù)向結(jié)合中加入需要被監(jiān)視的目標文件描述符,select返回時,同樣會把不可寫文件描述符清掉,如果需要重新監(jiān)視文件描述符,需要重新FD_SET設(shè)置。
exceptfds:該描述符集合是用于監(jiān)視文件描述符集合中的任何文件是否發(fā)生錯誤。
timeout:用于設(shè)置超時的最長等待時間,如果在該規(guī)定時間內(nèi)沒有返回一個大于0的值,則返回0,表示超時。如果超時間設(shè)置為NULL,表示阻塞等待,直到符合條件的文件描述符在集合中出現(xiàn),當timeout的值為0時,select會立即返回。
timeout的數(shù)據(jù)結(jié)構(gòu)如下: struct timeval {
time_t tv_sec;
/*秒*/
long tv_usec;
/*微秒*/ };有4個宏可以操作文件描述符集合:
FD_ZERO: 用于清空文件描述符集合,F(xiàn)D_ZERO(&fds)。
千鋒教育www.tmdps.cn
中國IT職業(yè)教育領(lǐng)先品牌
精品課程 全程面授
FD_SET:向某個文件描述符結(jié)合中加入文件描述符, FD_SET(fd, &fds)。FD_CLR:從某個文件描述符結(jié)合中取出某個文件描述符, FD_CLR(fd, &fds)。FD_ISSET:測試某個文件描述符是否在某個文件描述符集合中, FD_ISSET(fd, &fds)。
下面是本實用socket編程,并且利用select IO實現(xiàn)的一個server和client實時通信的例子,為了顯示更直觀,加了一些打印以及接收數(shù)據(jù)上的操作,程序還有bug,希望閱讀的人不要介意,或者自行修改。代碼如下,可以作為學(xué)習(xí)socket和select的一個實例。server.c文件源碼如下: #include
int main(void)13 {
千鋒教育www.tmdps.cn
中國IT職業(yè)教育領(lǐng)先品牌
精品課程 全程面授
int sockfd, clientfd;
struct sockaddr_in sockServer, sockClient;16
struct timeval tv;17
fd_set readfds, writefds;18
int readlen, writelen;19
char buffer[SIZE];20
sockfd = socket(AF_INET, SOCK_STREAM, 0);22
if(sockfd < 0)23
{ 24
perror(“create socket failed!n”);25
return-1;26
} 27
bzero(&sockServer, 0);29
sockServer.sin_family = AF_INET;30
sockServer.sin_port = htons(SPORT);31
sockServer.sin_addr.s_addr = htonl(INADDR_ANY);32
if(bind(sockfd,(struct sockaddr *)&sockServer, sizeof(struct sockaddr_in))< 0)34
{
千鋒教育www.tmdps.cn
中國IT職業(yè)教育領(lǐng)先品牌
精品課程 全程面授
perror(“bind socket failed!n”);36
return-1;37
} 38
if(listen(sockfd, BACKLOG)< 0)40
{ 41
perror(“l(fā)isten failed!n”);42
} 43
printf(“Server is listening......n”);45
while(1)47
{ 48
int len = sizeof(struct sockaddr_in);49
int ret;50
time_t timet;51
clientfd = accept(sockfd,(struct sockaddr *)&sockClient, &len);53
if(clientfd < 0)54
{ 55
perror(“accept failed!n”);
千鋒教育www.tmdps.cn
中國IT職業(yè)教育領(lǐng)先品牌
精品課程 全程面授
return-1;57
} 58
for(;;)60
{ 61
FD_ZERO(&readfds);FD_SET(1, &readfds);FD_SET(clientfd, &readfds);tv.tv_usec = 0;tv.tv_sec = 60;
ret = select(clientfd+1, &readfds, NULL, NULL, &tv);switch(ret){
case 0:
printf(“select timeout!n”);
break;
case-1:
perror(“select return failed!n”);
goto closesocket;
default:
if(FD_ISSET(clientfd, &readfds)> 0)
千鋒教育www.tmdps.cn
中國IT職業(yè)教育領(lǐng)先品牌
精品課程 全程面授
{ 79
memset(buffer, 0, SIZE);80
readlen = read(clientfd, buffer, SIZE);81
if(readlen < 0)82
{ 83
ctime(&timet));88
perror(“read data failed!n”);
goto closesocket;
}
time(&timet);
printf(“Opposite: %d %s”, clientfd,strcat(buffer, “n”);
writelen = write(0, buffer, readlen+1);
if(writelen < 0)
{
perror(“write data failed!n”);
goto closesocket;
} }
if(FD_ISSET(1, &readfds)> 0){
time(&timet);
千鋒教育www.tmdps.cn
中國IT職業(yè)教育領(lǐng)先品牌
精品課程 全程面授
printf(“Owner: %d %sn”, sockfd, ctime(&timet));100
memset(buffer, 0, SIZE);101
readlen = read(1, buffer, SIZE);102
if(readlen < 0)103
112
113
} 114
} 115
} 116 closesocket: 117
close(clientfd);118
} 119
close(sockfd);
{
perror(“read data failed!n”);
goto closesocket;}
writelen = write(clientfd, buffer, readlen);if(writelen < 0){
perror(“write data failed!n”);
goto closesocket;} 千鋒教育www.tmdps.cn
中國IT職業(yè)教育領(lǐng)先品牌
120
121
return 0;122 }
client.c文件源碼如下: #include
int main(void)12 { 13
int sockfd, clientfd;
struct sockaddr_in sockServer;15
struct timeval tv;16
fd_set readfds;17
int readlen, writelen;
精品課程 全程面授
千鋒教育www.tmdps.cn
中國IT職業(yè)教育領(lǐng)先品牌
精品課程 全程面授
char buffer[SIZE];19
time_t timet;20
sockfd = socket(AF_INET, SOCK_STREAM, 0);22
if(sockfd < 0)23
{ 24
perror(“create socket failed!n”);25
return-1;26
} 27
bzero(&sockServer, 0);29
sockServer.sin_family = AF_INET;30
sockServer.sin_port = htons(SPORT);31
sockServer.sin_addr.s_addr = htonl(INADDR_ANY);32
if(connect(sockfd,(struct sockaddr *)&sockServer, sizeof(struct sockaddr_in))< 0)34
{ 35
perror(“connect failed!n”);36
close(sockfd);37
}
千鋒教育www.tmdps.cn
中國IT職業(yè)教育領(lǐng)先品牌
精品課程 全程面授
while(1)40
{ 41
int ret;42
FD_ZERO(&readfds);44
FD_SET(1, &readfds);45
FD_SET(sockfd, &readfds);46
tv.tv_usec = 0;47
tv.tv_sec = 60;48
ret = select(sockfd+1, &readfds, NULL, NULL, &tv);50
switch(ret)51
{ 52
case 0: 53
printf(“select timeout!n”);54
break;55
case-1: 56
perror(“select return failed!n”);57
goto closesocket;58
default: 59
if(FD_ISSET(sockfd, &readfds)> 0)60
{
千鋒教育www.tmdps.cn
中國IT職業(yè)教育領(lǐng)先品牌
精品課程 全程面授
memset(buffer, 0, SIZE);62
readlen = read(sockfd, buffer, SIZE);63
if(readlen < 0)64
{ 65
perror(“read data failed!n”);66
ctime(&timet));70
goto closesocket;
}
time(&timet);
printf(“Opposite: %s %s”, “Server”,strcat(buffer, “n”);
writelen = write(0, buffer, readlen + 1);
if(writelen < 0)
{
perror(“write data failed!n”);
goto closesocket;
} }
if(FD_ISSET(1, &readfds)> 0){
time(&timet);
printf(“Owner: %d %sn”, sockfd,千鋒教育www.tmdps.cn
中國IT職業(yè)教育領(lǐng)先品牌
精品課程 全程面授
ctime(&timet));82
memset(buffer, 0, SIZE);83
readlen = read(1, buffer, SIZE);84
if(readlen < 0)85
{ 86
perror(“read data failed!n”);87
goto closesocket;88
} 89
writelen = write(sockfd, buffer, readlen);90
if(writelen < 0)91
{ 92
perror(“write data failed!n”);93
goto closesocket;94
} 95
} 96
} 97
closesocket: 99
close(clientfd);100
} 101
close(sockfd);102
千鋒教育www.tmdps.cn
中國IT職業(yè)教育領(lǐng)先品牌
精品課程 全程面授
return 0;104 }
運行結(jié)果如下所示:
以上就是千鋒Linux學(xué)院的學(xué)習(xí)筆記。另附心得體會一篇:
從零基礎(chǔ)開始學(xué)Linux或者是轉(zhuǎn)行學(xué)習(xí)Linux,參加培訓(xùn)會保證你在單位時間內(nèi)學(xué)到更多,畢竟隨著Linux行業(yè)的快速發(fā)展,未來必將會面臨更多的競爭,所以只有不遺余力的把自己打造成一把利劍,從專業(yè)度到職業(yè)素質(zhì),只有比別人更突出和優(yōu)秀,才能夠在這個相互選擇的世界當中擁有更多的選擇權(quán)利。現(xiàn)在想要學(xué)習(xí)Linux技術(shù),只有通過參加培訓(xùn)才可以保證快速掌握所學(xué)知識和技能,所以培訓(xùn)是比較靠譜的。
學(xué)習(xí)Linux編程哪個好?千鋒教育的Linux課程專注于當前熱門的Linux相關(guān)技術(shù),就Linux而言,內(nèi)容全面而細致的。Linux教學(xué)團隊由眾多名師打造,擁有多年教學(xué)經(jīng)驗和高超的Linux授課技巧和實戰(zhàn)視野,讓你理論和實戰(zhàn)兼得。
千鋒教育www.tmdps.cn
中國IT職業(yè)教育領(lǐng)先品牌
精品課程 全程面授
千鋒教育www.tmdps.cn
第二篇:Linux編程培訓(xùn)哪個好
中國IT職業(yè)教育領(lǐng)先品牌
精品課程 全程面授
Linux編程培訓(xùn)哪個好
想知道Linux編程培訓(xùn)哪個好?先來了解一下什么是Linux編程吧!
Linux編程,比需要了解線程的問題。線程間通信之信號量
線程的信號量主要就是實現(xiàn)對公共資源的一種控制管理。當公共資源增加時,信號量的值增加;當公共資源減少時,信號量的值減少;只有信號量的值大于0時,才能訪問信號量所代表的公共資源。其實功能和之前的ucos的信號量功能類似。線程信號量初始化sem_init
intsem_init(sem_t *sem, intpshared, unsigned int value);功能介紹:
該函數(shù)主要的功能是創(chuàng)建一個信號量,設(shè)置該信號量的值,并且設(shè)置信號量的使用范圍。信號量創(chuàng)建成功后,可以對其進行加減操作。參數(shù)說明:
千鋒教育www.tmdps.cn
中國IT職業(yè)教育領(lǐng)先品牌
精品課程 全程面授
第一個參數(shù)sem是一個指向信號量結(jié)構(gòu)的指針,當信號量初始化成功后,可以的這個信號量指針進行加減操作;第二個參數(shù)表示信號量的共享屬性,當其值不為0時,信號量可以在進程間共享,如果等于0,則只能在同一個進程中的多個線程間共享;第三個參數(shù)用于設(shè)置信號量初始化時候的值。2 線程信號量增加函數(shù)sem_post
intsem_post(sem_t *sem);功能介紹:
該函數(shù)用于增加信號量的值,每次增加值為1。當有線程在等待該信號量,則等待信號量返回,不增加信號量的值。參數(shù)說明:
sem參數(shù)是初始化時候創(chuàng)建的信號量結(jié)構(gòu)體,用于記錄信號量值得參數(shù)。3 線程信號量減少函數(shù)sem_wait
intsem_wait(sem_t *sem);功能介紹:
該函數(shù)用于減少信號量的值,每次減少值為1。當信號量的值為0,則線程會阻塞一直等待信號量的值大于0為止,當值為0時,不在減少。參數(shù)說明:
sem參數(shù)是初始化時候創(chuàng)建的信號量結(jié)構(gòu)體。4 線程信號量的銷毀函數(shù)sem_destroy
intsem_destroy(sem_t *sem);功能介紹:
函數(shù)用于釋放創(chuàng)建的信號量。
千鋒教育www.tmdps.cn
中國IT職業(yè)教育領(lǐng)先品牌
精品課程 全程面授
參數(shù)說明:
sem參數(shù)是初始化時候創(chuàng)建的信號量結(jié)構(gòu)體。
使用線程的信號量進行通信,可以有效的對線程資源進行合理的分配,同時可以使線程以一個合理的方式進行調(diào)度。下面的代碼是一個小小的實例,用很常規(guī)的方法來使用信號量,當線程獲得獲得信號量之后,在處理完相應(yīng)的操作之后會主動的釋放掉信號量。其實可以根據(jù)信號量的wait和post自己設(shè)計使用信號量。不過需要注意的是在wait和post函數(shù)分開使用時,可能會因為線程優(yōu)先級等問題,post和wait被調(diào)用的次數(shù)不是對等的,這時候這時候可能出現(xiàn)的問題是不可控的,在這種方式設(shè)計程序時,需要把大部分的情況考慮進去,當然可能出現(xiàn)的情況的種數(shù)也是從0到1質(zhì)變,從1到n量變得過程。
#include sem_tsem;7 intsemValue;8 void *pthread_wait(void *argv)10 { 11 while(1) 千鋒教育www.tmdps.cn 中國IT職業(yè)教育領(lǐng)先品牌 精品課程 全程面授 { 13 sem_wait(&sem);14 sem_getvalue(&sem, &semValue);15 printf(“This is in phtread WAIT function!sem = %dn”, semValue);16 sem_post(&sem);17 sleep(1);18 } 19 pthread_exit(“exit wait pthread!n”);20 } 21 void *pthread_post(void *argv)23 { 24 while(1)25 { 26 sem_wait(&sem);27 sem_getvalue(&sem, &semValue);28 printf(“This is in phtread POST function!sem = %dn”, semValue);29 sem_post(&sem);30 sleep(1);31 } 千鋒教育www.tmdps.cn 中國IT職業(yè)教育領(lǐng)先品牌 精品課程 全程面授 pthread_exit(“exit post pthread!”);33 } 34 intmain(void)36 { 37 pthread_tpt[2];38 void *ret;39 sem_init(&sem,0,2);41 pthread_create(&pt[0], NULL, &pthread_wait, NULL);42 pthread_create(&pt[1], NULL, &pthread_post, NULL);43 pthread_join(pt[0], &ret);44 printf(“return value %s”, ret);45 pthread_join(pt[1], &ret);46 printf(“return value %s”, ret);47 return 0;49 } 上面代碼的運行結(jié)果如下,因為是線程采用了無限循環(huán)的方式,所以pthread_exit和pthread_join不會執(zhí)行到。 千鋒教育www.tmdps.cn 中國IT職業(yè)教育領(lǐng)先品牌 精品課程 全程面授 如果將上面代碼中的第26行注釋掉,運行結(jié)果如下,可以看到信號量的值一直在增加,就如上面提到的因為sem_wait函數(shù)和sem_post函數(shù)不能同時使用時,會出現(xiàn)一些不可控的運行結(jié)果。也可以利用這種情況,設(shè)計程序。 以上就是千鋒Linux學(xué)院的學(xué)習(xí)筆記。另附心得體會一篇: 從零基礎(chǔ)開始學(xué)Linux或者是轉(zhuǎn)行學(xué)習(xí)Linux,參加培訓(xùn)會保證你在單位時間內(nèi)學(xué)到更多,畢竟隨著Linux行業(yè)的快速發(fā)展,未來必將會面臨更多的競爭,所以只有不遺余力的把自己打造成一把利劍,從專業(yè)度到職業(yè)素質(zhì),只有比別人更突出和優(yōu)秀,才能夠在這個相互選擇的世界當中擁有更多的選擇權(quán)利。現(xiàn)在想要學(xué)習(xí)Linux技術(shù),只有通過參加培訓(xùn)才可以保證快速掌握所學(xué)知識和技能,所 千鋒教育www.tmdps.cn 中國IT職業(yè)教育領(lǐng)先品牌 精品課程 全程面授 以培訓(xùn)是比較靠譜的。 Linux編程培訓(xùn)哪個好?千鋒教育的Linux課程專注于當前熱門的Linux相關(guān)技術(shù),就Linux而言,內(nèi)容全面而細致的。Linux教學(xué)團隊由眾多名師打造,擁有多年教學(xué)經(jīng)驗和高超的Linux授課技巧和實戰(zhàn)視野,讓你理論和實戰(zhàn)兼得。 千鋒教育www.tmdps.cn 中國IT職業(yè)教育領(lǐng)先品牌 精品課程 全程面授 Linux網(wǎng)絡(luò)編程培訓(xùn)哪個好 Linux下的網(wǎng)絡(luò)編程培訓(xùn)哪個好?先來了解一下什么事Linux下的網(wǎng)絡(luò)編程吧! Linux下的網(wǎng)絡(luò)編程指的是socket套接字編程,入門比較簡單。在學(xué)校里學(xué)過一些皮毛,平時就是自學(xué)玩,沒有見識過真正的socket編程大程序,比較遺憾。總感覺每次看的時候都有收獲,但是每次看完了之后,過段時間不看,重新拾起這些知識的時候又要從頭開始,所以,在這里做個筆記也算是做個模板,以后可以直接從某一個階段開始接著玩…… socket套接字基本函數(shù)介紹 1 創(chuàng)建socket套接字 int socket(int family, int type, int protocol);功能介紹: 在Linux操作系統(tǒng)中,一切皆文件,這個大家都知道,個人理解創(chuàng)建socket的過程其實就是一個獲得文件描述符的過程,當然這個過程會是比較復(fù)雜的。可以從內(nèi)核中找到創(chuàng)建socket的代碼,并且socket的創(chuàng)建和其他的listen,bind等操作分離開來。socket函數(shù)完成正確的操作是返回值大于0的文件描述符,當返回小于0的值時,操作錯誤。同樣是返回一個文件描述符,但是會因為三個參數(shù)組合不同,對于數(shù)據(jù)具體的工作流程不同,對于應(yīng)用層編程來說,這些也是不可見的。參數(shù)說明: 從socket創(chuàng)建的函數(shù)可以看出,socket有三個參數(shù),family代表一個協(xié) 千鋒教育www.tmdps.cn 中國IT職業(yè)教育領(lǐng)先品牌 精品課程 全程面授 議族,比較熟知的就是AF_INET,PF_PACKET等;第二個參數(shù)是協(xié)議類型,常見類型是SOCK_STREAM, SOCK_DGRAM, SOCK_RAW, SOCK_PACKET等;第三個參數(shù)是具體的協(xié)議,對于標準套接字來說,其值是0,對于原始套接字來說就是具體的協(xié)議值。2 地址端口綁定函數(shù)bind int bind(intsockfd, conststructsockaddr *myaddr, socklen_taddrlen);功能介紹: bind函數(shù)主要應(yīng)用于服務(wù)器模式一端,其主要的功能是將addrlen長度 structsockaddr類型的myaddr地址與sockfd文件描述符綁定到一起,在sockaddr中主要包含服務(wù)器端的協(xié)議族類型,網(wǎng)絡(luò)地址和端口號等。在客戶端模式中不需要使用bind函數(shù)。當bind函數(shù)返回0時,為正確綁定,返回-1,則為綁定失敗。參數(shù)說明: bind函數(shù)的第一個參數(shù)sockfd是在創(chuàng)建socket套接字時返回的文件描述符。 bind函數(shù)的第二個參數(shù)是structsockaddr類型的數(shù)據(jù)結(jié)構(gòu),由于structsockaddr數(shù)據(jù)結(jié)構(gòu)類型不方便設(shè)置,所以通常會通過對tructsockaddr_in進行地質(zhì)結(jié)構(gòu)設(shè)置,然后進行強制類型轉(zhuǎn)換成structsockaddr類型的數(shù)據(jù),下面是兩種類型數(shù)據(jù)結(jié)構(gòu)的定義和對應(yīng)關(guān)系圖。 typedef unsigned short sa_family_t;structin_addr { __be32 s_addr; 千鋒教育www.tmdps.cn 中國IT職業(yè)教育領(lǐng)先品牌 精品課程 全程面授 }; structsockaddr { sa_family_tsa_family; /* address family, AF_xxx */ charsa_data[14]; /* 14 bytes of protocol address */ }; /* Structure describing an Internet(IP)socket address.*/ #define __SOCK_SIZE__ /* sizeof(structsockaddr) */ structsockaddr_in { sa_family_tsin_family; /* Address family */ __be16 sin_port; /* Port number */ structin_addrsin_addr; /* Internet address */ /* */ unsigned char __pad[__SOCK_SIZE__sizeof(unsigned short int)-sizeof(structin_addr)];}; 千鋒教育www.tmdps.cn Pad to size of `structsockaddr'.中國IT職業(yè)教育領(lǐng)先品牌 精品課程 全程面授 圖5 structsockaddr_in和structsockaddr的映射關(guān)系 bind函數(shù)的第三個參數(shù)是指定structsockaddr類型數(shù)據(jù)的長度,因為前面講過bind函數(shù)的第二個參數(shù)是通過設(shè)置一個較容易的數(shù)據(jù)結(jié)構(gòu),然后通過強制類型轉(zhuǎn)換成structsockaddr,實際上,第二個參數(shù)具體的數(shù)據(jù)結(jié)構(gòu)的長度會根據(jù)socket創(chuàng)建時,設(shè)置的family協(xié)議族的不同而不同,像AF_UNIX協(xié)議族的bind函數(shù)第二個參數(shù)的數(shù)據(jù)結(jié)構(gòu)應(yīng)該是structsockaddr_un,其大小和structsockaddr_in不同。3 監(jiān)聽本地端口listen int listen(intsockfd, int backlog);功能介紹: 剛開始理解listen函數(shù)會有一個誤區(qū),就是認為其操作是在等在一個新的connect的到來,其實不是這樣的,真正等待connect的是accept操作,listen的操作就是當有較多的client發(fā)起connect時,server端不能及時的處理已經(jīng)建立的連接,這時就會將connect連接放在等待隊列中緩存起來。這個等待隊列的長度有l(wèi)isten中的backlog參數(shù)來設(shè)定。listen和accept函數(shù)是服務(wù)器模 千鋒教育www.tmdps.cn 中國IT職業(yè)教育領(lǐng)先品牌 精品課程 全程面授 式特有的函數(shù),客戶端不需要這個函數(shù)。當listen運行成功時,返回0;運行失敗時,返回值位-1.參數(shù)說明: sockfd是前面socket創(chuàng)建的文件描述符;backlog是指server端可以緩存連接的最大個數(shù),也就是等待隊列的長度。4 接受網(wǎng)絡(luò)請求函數(shù)accept int accept(intsockfd, structsockaddr *client_addr, socklen_t *len);功能介紹: 接受函數(shù)accept其實并不是真正的接受,而是客戶端向服務(wù)器端監(jiān)聽端口發(fā)起的連接。對于TCP來說,accept從阻塞狀態(tài)返回的時候,已經(jīng)完成了三次握手的操作。Accept其實是取了一個已經(jīng)處于connected狀態(tài)的連接,然后把對方的協(xié)議族,網(wǎng)絡(luò)地址以及端口都存在了client_addr中,返回一個用于操作的新的文件描述符,該文件描述符表示客戶端與服務(wù)器端的連接,通過對該文件描述符操作,可以向client端發(fā)送和接收數(shù)據(jù)。同時之前socket創(chuàng)建的sockfd,則繼續(xù)監(jiān)聽有沒有新的連接到達本地端口。返回大于0的文件描述符則表示accept成功,否則失敗。參數(shù)說明: sockfd是socket創(chuàng)建的文件描述符;client_addr是本地服務(wù)器端的一個structsockaddr類型的變量,用于存放新連接的協(xié)議族,網(wǎng)絡(luò)地址以及端口號等;第三個參數(shù)len是第二個參數(shù)所指內(nèi)容的長度,對于TCP來說其值可以用sizeof(structsockaddr_in)來計算大小,說要說明的是accept的第三個參數(shù)要是指針的形式,因為這個值是要傳給協(xié)議棧使用的。 千鋒教育www.tmdps.cn 中國IT職業(yè)教育領(lǐng)先品牌 精品課程 全程面授 連接目標服務(wù)器函數(shù)connect int connect(intsock_fd, structsockaddr *serv_addr,intaddrlen);功能介紹: 連接函數(shù)connect是屬于client端的操作函數(shù),其目的是向服務(wù)器端發(fā)送連接請求,這也是從客戶端發(fā)起TCP三次握手請求的開始,服務(wù)器端的協(xié)議族,網(wǎng)絡(luò)地址以及端口都會填充到connect函數(shù)的serv_addr地址當中。當connect返回0時說明已經(jīng)connect成功,返回值是-1時,表示connect失敗。參數(shù)說明: connect的第一個參數(shù)是socket創(chuàng)建的文件描述符;第二個參數(shù)是一個structsockaddr類型的指針,這個參數(shù)中設(shè)置的是要連接的目標服務(wù)器的協(xié)議族,網(wǎng)絡(luò)地址以及端口號;第三個參數(shù)表示第二個參數(shù)內(nèi)容的大小,與accept不同,這個值不是一個指針。 在服務(wù)器端和客戶端建立連接之后是進行數(shù)據(jù)間的發(fā)送和接收,主要使用的接收函數(shù)是recv和read,發(fā)送函數(shù)是send和write。因為對于socket套接字來說,最終實際操作的是文件描述符,所以可以使用對文件進行操作的接收和發(fā)送函數(shù)對socket套接字進行操作。對于UDP編程來說,其服務(wù)器端和客戶端之間沒有三次握手建立連接,所以服務(wù)器端沒有l(wèi)isten和accept函數(shù),客戶端沒有connect函數(shù)。所以對于服務(wù)器端來說,沒有accept函數(shù),所以使用recvfrom函數(shù)來獲取數(shù)據(jù)的同時獲得客戶端的協(xié)議族,網(wǎng)絡(luò)地址以及端口號;對于客戶端來說,沒有connect函數(shù),所以使用sendto函數(shù)發(fā)送數(shù)據(jù)的同時設(shè)置服務(wù)器端的協(xié)議族,網(wǎng)絡(luò)地址以及端口;同理如果recvfrom用在客戶端,則 千鋒教育www.tmdps.cn 中國IT職業(yè)教育領(lǐng)先品牌 精品課程 全程面授 是接收服務(wù)器端數(shù)據(jù)和地址,sendto用在服務(wù)器端,則是發(fā)送到客戶端網(wǎng)絡(luò)地址以及端口數(shù)據(jù)。6 接收數(shù)據(jù)函數(shù)recvfrom ssize_trecvfrom(intsockfd, void *buf, size_tlen, int flags, structsockaddr *from, socklen_t *fromlen);功能介紹: 對于該函數(shù)主要的功能是,從客戶端或者服務(wù)器端接收數(shù)據(jù)以及發(fā)送方的地址信息存儲到本地的structsockaddr類型參數(shù)變量當中,如果函數(shù)返回-1,所說明接收數(shù)據(jù)失敗,如果返回的是大于等于0的值,則說明函數(shù)接收到的數(shù)據(jù)的大小。因為可以設(shè)置文件描述符的狀態(tài)為阻塞模式,所以在沒有接收到數(shù)據(jù)時,recvfrom會一直處于阻塞狀態(tài),直到有數(shù)據(jù)接收到。參數(shù)說明: sockfd是創(chuàng)建socket時的文件描述符;buf用于存儲接收到的數(shù)據(jù)緩沖區(qū),接收的數(shù)據(jù)將放到這個指針所指向的內(nèi)容的空間中;len是接收緩沖區(qū)的大小;from是指向structsockaddr的指針,接收發(fā)送方地址信息;fromlen是表示第5個參數(shù)所指向內(nèi)容的長度,可以使用sizeof(structsockaddr)來定義大小,不過因為是要傳給內(nèi)核協(xié)議棧,所以使用了指針類型。7 發(fā)送數(shù)據(jù)函數(shù)sendto sizeof_tsendto(intsockfd, const void *buf, size_tlen, int flag, conststructsockaddr *to, socklen_ttolen);功能介紹: sendto函數(shù)主要根據(jù)填充的接收方的地址信息向客戶端或者服務(wù)器端發(fā) 千鋒教育www.tmdps.cn 中國IT職業(yè)教育領(lǐng)先品牌 精品課程 全程面授 送數(shù)據(jù),接收方的地址信息會提前設(shè)置在structsockaddr類型的參數(shù)指針中,當返回值-1時,表明發(fā)送失敗,當返回值大于等于0時,表示發(fā)送成功,并且發(fā)送數(shù)據(jù)的大小會通過返回值傳遞回來。參數(shù)說明: sockfd是有socket創(chuàng)建的文件描述符;buf是發(fā)送數(shù)據(jù)緩沖區(qū),要發(fā)送的數(shù)據(jù)會放在這個指針指向的內(nèi)容空間中;len是發(fā)送緩沖區(qū)的大小;to是一個structsockaddr類型的指針,其指向地址的內(nèi)容是接收方地址信息;tolen表示第5個參數(shù)指向的數(shù)據(jù)內(nèi)容的長度,傳遞的是值,可以用sizeof(structsockaddr)計算。 以上就是千鋒Linux學(xué)院的學(xué)習(xí)筆記。另附心得體會一篇: 從零基礎(chǔ)開始學(xué)Linux或者是轉(zhuǎn)行學(xué)習(xí)Linux,參加培訓(xùn)會保證你在單位時間內(nèi)學(xué)到更多,畢竟隨著Linux行業(yè)的快速發(fā)展,未來必將會面臨更多的競爭,所以只有不遺余力的把自己打造成一把利劍,從專業(yè)度到職業(yè)素質(zhì),只有比別人更突出和優(yōu)秀,才能夠在這個相互選擇的世界當中擁有更多的選擇權(quán)利。現(xiàn)在想要學(xué)習(xí)Linux技術(shù),只有通過參加培訓(xùn)才可以保證快速掌握所學(xué)知識和技能,所以培訓(xùn)是比較靠譜的。 Linux下的網(wǎng)絡(luò)編程培訓(xùn)哪個好?千鋒教育的Linux課程專注于當前熱門的Linux相關(guān)技術(shù),就Linux而言,內(nèi)容全面而細致的。Linux教學(xué)團隊由眾多名師打造,擁有多年教學(xué)經(jīng)驗和高超的Linux授課技巧和實戰(zhàn)視野,讓你理論和實戰(zhàn)兼得。 千鋒教育www.tmdps.cn 中國IT職業(yè)教育領(lǐng)先品牌 精品課程 全程面授 千鋒教育www.tmdps.cn Net or Class As the technology is more and more advanced, the resources for our studying are more and more abundant.And so do the approaches to our studying.Thus, the problem of how to choose the way to achieve knowledge arises and becomes a hot topic among students.Some students argue that learning on the net is more convenient.Moreover, the resources on the net are so abundant that students can get whatever they want.Even they can call some specialists for help just by clicking the mouse.However, some others approve the studying in class.In their opinion, studying in class is more interesting.Professors will show both their knowledge and experience to students.In addition, abundant resources on the net are not only angles but also devils.To my mind, I prefer studying in class.Only in class can we communicate with teachers truly face to face.It is also necessary that we should master the skills to communicate with others.Even though the resources on the net are abundant, we must have the abilities to resist the bad information.To sum up, I’m for the studying in class. 財務(wù)軟件哪個好:各類財務(wù)軟件對比分析 財務(wù)軟件是企業(yè)信息化的第一選擇,目前中國市場上財務(wù)軟件廠商、品牌眾多,比如用友軟件、金蝶軟件、浪潮軟件、速達軟件、管家婆等,那么哪個財務(wù)軟件好,企業(yè)該如何選擇?中國云應(yīng)用平臺為您對比一下各個品牌的優(yōu)劣,供您參考。 1、用友財務(wù)軟件 產(chǎn)品已經(jīng)涵蓋了小型企業(yè)、成長型企業(yè)、大中型企業(yè)和集團,是國內(nèi)市場占有率最大的財務(wù)軟件廠商。主要產(chǎn)品包括:用友通 用友T系列 用友U8 用友U9等。小型企業(yè)財務(wù)軟件價格在4000元-3萬元 中型、大型企業(yè) 一般在10萬元以上 上市集團型企業(yè)成交金額在1千萬元左右。用友軟件已形成NC、U8、“通”三條產(chǎn)品和業(yè)務(wù)線,分別面向大、中、小型企業(yè)提供軟件和服務(wù),用友軟件的產(chǎn)品已全面覆蓋企業(yè)從創(chuàng)業(yè)、成長到成熟的完整生命周期,能夠為各類企業(yè)提供適用的信息化解決方案。 2、速達財務(wù)軟件、管家婆、新中大、千里馬等一些行業(yè)軟件定位于中小企業(yè),其中速達的市場占有率相當高。相比用友、金蝶等一線品牌,速達、管家婆、新中大等產(chǎn)品注重用戶使用上的便捷性,目前在產(chǎn)品穩(wěn)定性等一些細節(jié)方面已經(jīng)有長足進步,產(chǎn)品更新比較快。用友、金蝶有的版本很快時間內(nèi)就有了更新。速達、管家婆、新中大等價格便宜許多,同等功能的產(chǎn)品,價格不到用友、金蝶的一半,對于資金不太充裕的中小企業(yè),成長型企業(yè)來說,是個不錯的選擇。 3、金蝶財務(wù)軟件 適用于各類企業(yè) 價格和用友差不多稍微比用友低一點 就好像寶馬和奔馳一樣 也有一大批國內(nèi)行業(yè)龍頭企業(yè)選擇金蝶產(chǎn)品 市場份額:國內(nèi)不到一半企業(yè)選擇金蝶 大公司服務(wù)都不錯就看各地的公司水平了,兩家公司總部的實力那是都沒得說。口號 讓管理更簡單 香港上市企業(yè) 南方用戶多,南方市場占有率多一些 總部在琛圳 4、浪潮財務(wù)軟件 借助國內(nèi)服務(wù)器浪潮的名聲,財務(wù)軟件排在第三名,浪潮公司抓住了一些重點企業(yè),特別是山東的公司,像晨鳴紙業(yè)、石化企業(yè)等。但不適用小型企業(yè),因為他的全國網(wǎng)絡(luò)至今沒有完全打開,很多地級市縣級市沒有代理商。相比用友、金蝶各地都有了幾家代理同時在做,浪潮軟件總的來說可以不錯。第三篇:Linux網(wǎng)絡(luò)編程培訓(xùn)哪個好專題
第四篇:網(wǎng)上學(xué)習(xí)和上課哪個好
第五篇:財務(wù)軟件哪個好