Linux网络编程一步一步学编辑:刘杰日期:2009-08-12于:无锡矽太恒科Linux网络编程一步一步学-简单客户端编写关键词:Linux网络socket编程program#includestdio.h#includestring.h#includeerrno.h#includesys/socket.h#includeresolv.h#includestdlib.h#includenetinet/in.h#includearpa/inet.h#includeunistd.h#defineMAXBUF1024/************关于本文档*********************************************filename:simple-socket.c*purpose:演示最基本的网络编程步骤,这是个客户端程序*wroteby:zhoulifa(zhoulifa@163.com)周立发()Linux爱好者Linux知识传播者SOHO族开发者最擅长C语言*datetime:2007-01-2319:41:54*Note:任何人可以任意复制代码并运用这些文档,当然包括你的商业用途*但请遵循GPL*Hope:希望越来越多的人贡献自己的力量,为科学技术发展出力*科技站在巨人的肩膀上进步更快!感谢有开源前辈的贡献!*********************************************************************/intmain(intargc,char**argv){intsockfd;structsockaddr_indest;charbuffer[MAXBUF];if(argc!=3){printf(参数格式错误!正确用法如下:\n\t\t%sIP地址端口\n\t比如:\t%s127.0.0.180\n此程序用来从某个IP地址的服务器某个端口接收最多MAXBUF个字节的消息,argv[0],argv[0]);exit(0);}/*创建一个socket用于tcp通信*/if((sockfd=socket(AF_INET,SOCK_STREAM,0))0){perror(Socket);exit(errno);}/*初始化服务器端(对方)的地址和端口信息*/bzero(&dest,sizeof(dest));dest.sin_family=AF_INET;dest.sin_port=htons(atoi(argv[2]));if(inet_aton(argv[1],(structin_addr*)&dest.sin_addr.s_addr)==0){perror(argv[1]);exit(errno);}/*连接服务器*/if(connect(sockfd,(structsockaddr*)&dest,sizeof(dest))!=0){perror(Connect);exit(errno);}/*接收对方发过来的消息,最多接收MAXBUF个字节*/bzero(buffer,MAXBUF);recv(sockfd,buffer,sizeof(buffer),0);printf(%s,buffer);/*关闭连接*/close(sockfd);return0;}编译此程序使用如下命令:gcc-Wallsimple-socket.c运行此程序使用如下命令(假设你的主机上开启了ssh服务):./a.out127.0.0.122Linux网络编程一步一步学-绑定IP和端口关键词:socketbindport端口绑定#includestdio.h#includestring.h#includeerrno.h#includesys/socket.h#includeresolv.h#includestdlib.h#includenetinet/in.h#includearpa/inet.h#includeunistd.h#defineMAXBUF1024/************关于本文档*********************************************filename:simple-bind.c*purpose:演示最基本的网络编程步骤,这是个客户端程序以固定IP和端口连接服务器*wroteby:zhoulifa(zhoulifa@163.com)周立发()Linux爱好者Linux知识传播者SOHO族开发者最擅长C语言*datetime:2007-01-2319:51:54*Note:任何人可以任意复制代码并运用这些文档,当然包括你的商业用途*但请遵循GPL*Hope:希望越来越多的人贡献自己的力量,为科学技术发展出力*科技站在巨人的肩膀上进步更快!感谢有开源前辈的贡献!*********************************************************************/intmain(intargc,char**argv){intsockfd;structsockaddr_indest,mine;charbuffer[MAXBUF];if(argc!=5){printf(参数格式错误!正确用法如下:\n\t\t%s对方IP地址对方端口本机IP地址本机端口\n\t比如:\t%s127.0.0.180\n此程序用来以本机固定的端口从某个IP地址的服务器某个端口接收最多MAXBUF个字节的消息,argv[0],argv[0]);exit(0);}/*创建一个socket用于tcp通信*/if((sockfd=socket(AF_INET,SOCK_STREAM,0))0){perror(Socket);exit(errno);}/*初始化服务器端(对方)的地址和端口信息*/bzero(&dest,sizeof(dest));dest.sin_family=AF_INET;dest.sin_port=htons(atoi(argv[2]));if(inet_aton(argv[1],(structin_addr*)&dest.sin_addr.s_addr)==0){perror(argv[1]);exit(errno);}/*初始化自己的地址和端口信息*/bzero(&mine,sizeof(mine));mine.sin_family=AF_INET;mine.sin_port=htons(atoi(argv[4]));if(inet_aton(argv[3],(structin_addr*)&mine.sin_addr.s_addr)==0){perror(argv[3]);exit(errno);}/*把自己的IP地址信息和端口与socket绑定*/if(bind(sockfd,(structsockaddr*)&mine,sizeof(structsockaddr))==-1){perror(argv[3]);exit(errno);}/*连接服务器*/if(connect(sockfd,(structsockaddr*)&dest,sizeof(dest))!=0){perror(Connect);exit(errno);}/*接收对方发过来的消息,最多接收MAXBUF个字节*/bzero(buffer,MAXBUF);recv(sockfd,buffer,sizeof(buffer),0);printf(%s,buffer);sleep(10);/*关闭连接*/close(sockfd);return0;}编译程序用此命令:gcc-Wallsimple-bind.c运行程序用此命令:./a.out127.0.0.122127.0.0.13000同时可以用下列netstat命令查看网络连接状态:netstat-an|grep3000查看到如下信息:tcp00127.0.0.1:3000127.0.0.1:22ESTABLISHEDLinux网络编程一步一步学-循环读取服务器上的数据关键词:Linux网络socket编程循环#includestdio.h#includestring.h#includeerrno.h#includesys/socket.h#includeresolv.h#includestdlib.h#includenetinet/in.h#includearpa/inet.h#includeunistd.h#defineMAXBUF10/************关于本文档*********************************************filename:simple-readall.c*purpose:演示最基本的网络编程,循环读取服务器上发过来的内容,直到读完为止*wroteby:zhoulifa(zhoulifa@163.com)周立发()Linux爱好者Linux知识传播者SOHO族开发者最擅长C语言*datetime:2007-01-2320:16:54*Note:任何人可以任意复制代码并运用这些文档,当然包括你的商业用途*但请遵循GPL*Hope:希望越来越多的人贡献自己的力量,为科学技术发展出力*科技站在巨人的肩膀上进步更快!感谢有开源前辈的贡献!*********************************************************************/intmain(intargc,char**argv){intsockfd,ret;structsockaddr_indest,mine;charbuffer[MAXBUF+1];if(argc!=5){printf(参数格式错误!正确用法如下:\n\t\t%s对方IP地址对方端口本机IP地址本机端口\n\t比如:\t%s127.0.0.180\n此程序用来以本机固定的端口从某个IP地址的服务器某个端口接收最多MAXBUF个字节的消息,argv[0],argv[0]);exit(0);}/*创建一个socket用于tcp通信*/if((sockfd=socket(AF_INET,SOCK_STREAM,0))0){perror(Socket);exit(errno);}/*初始化服务器端(对方)的地址和端口信息*/bzero(&dest,sizeof(dest));dest.sin_family=AF_INET;dest.sin_port=htons(atoi(argv[2]));if(inet_aton(argv[1],(structin_addr*)&dest.sin_addr.s_addr)==0){perror(argv[1]);exit(errno);}/*初始化自己的地址和端口信息*/bzero(&mine,sizeof(mine));mine.sin_family=AF_INET;mine.sin_port=htons(atoi(argv[4]));if(inet_aton(argv[3],(structin_addr*)&mine.sin_addr.s_addr)==0){perror(argv[3]);exit(errno);}/*把自己的IP地址信息和端口与socket绑定*/if(bind(sockfd,(structsockaddr*)&mine,sizeof(structsockaddr))==-1){perror(argv[3]);exit(errno);}/*连接服务器*/if(connect(sockfd,(structsockaddr*)&dest,sizeof(de