1. 程式人生 > >我的第一個linux網路程式設計

我的第一個linux網路程式設計

寫第一個linux網路程式設計的時候碰到了不少的問題,即使你在網上找到的程式碼原封不動的複製到你的Linux上也會出現各種問題。沒辦法,自己啃吧!然後今天成功的運行了一個Linux的程式,並分享給大家,希望對你我他有幫助。這個程式是unix網路程式設計一書上的第一個程式,我對它按照自己的理解進行了部分修改。 程式碼: #include< iostream> #include<string.h> #include< cstdlib> #include< cstdio> #include< cerrno> #include<unistd.h> #include<sys/types.h> #include<sys/socket.h> #include<netinet/in.h> #include<netinet/ip.h> #include<arpa/inet.h> using namespace std; int main(int argc,char ** argv) { int sockfd,n; char recvline[1025]; struct sockaddr_in seraddr; if(argc!=2) //if the parameter the order is not equal with 2,start the next orders { printf(“usage:./a.out< IPaddress>”); } if((sockfd=socket(AF_INET,SOCK_STREAM,0))<0) { fputs(“hello world”,stderr); exit(0); } bzero(&seraddr,sizeof(seraddr)); seraddr.sin_port=htons(22); seraddr.sin_family=AF_INET; if(inet_pton(AF_INET,argv[1],&seraddr.sin_addr)<=0) { cout<<"inet_pton err "<<endl; exit(0); } if((connect(sockfd,(struct sockaddr*)&seraddr,sizeof(seraddr)))<0) { cout<<“connect failed!”<<endl; exit(0); } while((n=read(sockfd,recvline,1024)) >0) { recvline[n]=’\0’; if(fputs(recvline,stdout)==EOF) { cout<<“fputs err”<<endl; exit(0); } } if(n<0) { cout<<“read err”<<endl; exit(0); } close(sockfd); return 0; } 問題一:

關於int main(int argc,char **argv)的問題。 argc是外部命令引數的個數,argv[]存放的是各個引數的內容。它們都是unix的標準寫法。要是還有不明白的去百度,因為這裡要講的話會講很多。 問題二: inet_pton()函式介紹: int inet_pton(int family,const char *strptr,void *addptr); family是AF_INET/AF_INET。表示ipv4或者ipv6之一。 它嘗試轉換由strptr所指向的指標,並通過addrpte指標來存放這個二進位制的轉換結果,成功則返回1,family無效則返回0.本栗子中,就是用外部命令的第二個引數來初始化seraddr.sin_addr。 其它常見的函式我就不說明了,我只是說一些比較不常見或者比較容易錯的函式及其它問題了。 實驗結果(我是在test.cpp檔案裡面寫的):
在這裡插入圖片描述 192.168.40.131是我的linux的ip,且能夠ping通。