




全文预览已结束
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Linux Socket编程实例(一个Hello World程序)在Linux下写了个小的socket程序,分为客户端和服务器端,服务端开一个端口(2000),做为一个daemon,等待客户的连接请求.一旦有客户连接,服务器端打印出客户端的IP地址和端口,并且向服务器端发送欢迎信息和时间.下面是服务端的代码(tcpserver.c).由于这只是个简单的程序,所以只用了单线程实现!Cpp代码 1. /* 2. *TcpServerprogram,Itisasimpleexampleonly. 3. *zhengsh2005206020612 4. *whenclientconnecttoserver,sendawelcomemessageandtimestampinserver. 5. */6. 7. #include 8. #include 9. #include 10. #include 11. #include 12. #include 13. #include 14. 15. #defineSERVER_PORT20000/definethedefualtconnectportid 16. #defineLENGTH_OF_LISTEN_QUEUE10/lengthoflistenqueueinserver 17. #defineBUFFER_SIZE255 18. #defineWELCOME_MESSAGEwelcometoconnecttheserver. 19. 20. 21. intmain(intargc,char*argv) 22. 23. intservfd,clifd; 24. structsockaddr_inservaddr,cliaddr; 25. 26. if(servfd=socket(AF_INET,SOCK_STREAM,0)0) 27. 28. printf(createsocketerror!n); 29. exit(1); 30. 31. bzero(&servaddr,sizeof(servaddr); 32. servaddr.sin_family=AF_INET; 33. servaddr.sin_port=htons(SERVER_PORT); 34. servaddr.sin_addr.s_addr=htons(INADDR_ANY); 35. 36. if(bind(servfd,(structsockaddr*)&servaddr,sizeof(servaddr)0) 37. 38. printf(bindtoport%dfailure!n,SERVER_PORT); 39. exit(1); 40. 41. 42. if(listen(servfd,LENGTH_OF_LISTEN_QUEUE)0) 43. 44. printf(calllistenfailure!n); 45. exit(1); 46. 47. 48. while(1) 49. /serverloopwillnerverexitunlessanybodykilltheprocess 50. charbufBUFFER_SIZE; 51. longtimestamp; 52. socklen_tlength=sizeof(cliaddr); 53. clifd=accept(servfd,(structsockaddr*)&cliaddr,&length); 54. if(clifd0) 55. 56. printf(errorcomeswhencallaccept!n); 57. break; 58. 59. strcpy(buf,WELCOME_MESSAGE); 60. /inet_ntop(INET_ADDRSTRLEN,cliaddr.sin_addr,buf,BUFFER_SIZE); 61. 62. printf(fromclient,IP:%s,Port:%dn,inet_ntoa(cliaddr.sin_addr),ntohs(cliaddr.sin_port); 63. timestamp=time(NULL); 64. strcat(buf,timestampinserver:); 65. strcat(buf,ctime(×tamp); 66. send(clifd,buf,BUFFER_SIZE,0); 67. close(clifd); 68. 69. /exit 70. close(servfd); 71. return0; 72. /* * Tcp Server program, It is a simple example only. * zhengsh 200520602061 2 * when client connect to server, send a welcome message and timestamp in server. */ #include #include #include #include #include #include #include #define SERVER_PORT 20000 / define the defualt connect port id#define LENGTH_OF_LISTEN_QUEUE 10 /length of listen queue in server#define BUFFER_SIZE 255#define WELCOME_MESSAGE welcome to connect the server. int main(int argc, char *argv) int servfd,clifd; struct sockaddr_in servaddr,cliaddr; if (servfd = socket(AF_INET,SOCK_STREAM,0) 0) printf(create socket error!n); exit(1); bzero(&servaddr,sizeof(servaddr); servaddr.sin_family = AF_INET; servaddr.sin_port = htons(SERVER_PORT); servaddr.sin_addr.s_addr = htons(INADDR_ANY); if (bind(servfd,(struct sockaddr*)&servaddr,sizeof(servaddr)0) printf(bind to port %d failure!n,SERVER_PORT); exit(1); if (listen(servfd,LENGTH_OF_LISTEN_QUEUE) 0) printf(call listen failure!n); exit(1); while (1) /server loop will nerver exit unless any body kill the process char bufBUFFER_SIZE; long timestamp; socklen_t length = sizeof(cliaddr); clifd = accept(servfd,(struct sockaddr*)&cliaddr,&length); if (clifd 0) printf(error comes when call accept!n); break; strcpy(buf,WELCOME_MESSAGE); /inet_ntop(INET_ADDRSTRLEN,cliaddr.sin_addr,buf,BUFFER_SIZE); printf(from client,IP:%s,Port:%dn,inet_ntoa(cliaddr.sin_addr),ntohs(cliaddr.sin_port); timestamp = time(NULL); strcat(buf,timestamp in server:); strcat(buf,ctime(×tamp); send(clifd,buf,BUFFER_SIZE,0); close(clifd); /exit close(servfd); return 0;客户每次用一个随机的端口连接服务器,并接收来自服务器的欢迎信息,然后打印出来(tcpclient).运行的时候接受一个参数,也就是服务器的ip地址.Cpp代码 1. /*Tcpclientprogram,Itisasimpleexampleonly. 2. *zhengsh2005206020612 3. *connecttoserver,andechoamessagefromserver. 4. */5. 6. 7. #include 8. #include 9. #include 10. #include 11. #include 12. #include 13. 14. #defineSERVER_PORT20000/definethedefualtconnectportid 15. #defineCLIENT_PORT(20001+rand()%65536)/definethedefualtclientportasarandomport 16. 17. #defineBUFFER_SIZE255 18. #defineREUQEST_MESSAGEwelcometoconnecttheserver.n 19. 20. voidusage(char*name) 21. 22. printf(usage:%sIpAddrn,name); 23. 24. 25. intmain(intargc,char*argv) 26. 27. intservfd,clifd,length=0; 28. structsockaddr_inservaddr,cliaddr; 29. socklen_tsocklen=sizeof(servaddr); 30. charbufBUFFER_SIZE; 31. 32. if(argc2) 33. 34. usage(argv0); 35. exit(1); 36. 37. 38. if(clifd=socket(AF_INET,SOCK_STREAM,0)0) 39. 40. printf(createsocketerror!n); 41. exit(1); 42. 43. srand(time(NULL);/initializerandomgenerator 44. bzero(&cliaddr,sizeof(cliaddr); 45. cliaddr.sin_family=AF_INET; 46. cliaddr.sin_port=htons(CLIENT_PORT); 47. cliaddr.sin_addr.s_addr=htons(INADDR_ANY); 48. 49. bzero(&servaddr,sizeof(servaddr); 50. servaddr.sin_family=AF_INET; 51. inet_aton(argv1,&servaddr.sin_addr); 52. servaddr.sin_port=htons(SERVER_PORT); 53. /servaddr.sin_addr.s_addr=htons(INADDR_ANY); 54. 55. if(bind(clifd,(structsockaddr*)&cliaddr,sizeof(cliaddr)0) 56. 57. printf(bindtoport%dfailure!n,CLIENT_PORT); 58. exit(1); 59. 60. 61. if(connect(clifd,(structsockaddr*)&servaddr,socklen)0) 62. 63. printf
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026届四川省成都市双流棠湖中学高二化学第一学期期末学业质量监测试题含答案
- 改革开放形势政策课件
- 外研社版英语三起四年级下册课程教学计划
- 节气与甘肃民俗
- 2025年科技公司研发部招聘面试技巧及预测题
- 2025年罗茨风机项目提案报告
- 2025年城市规划与管理领域专业人才招聘笔试模拟试题及答案全解
- 节日安全知识培训课件记录
- 儿童游泳意外伤害事件的防范措施
- 2025年编程高手挑战赛模拟题与答案详解
- 中铝矿业有限公司巩义市张家沟大发铝土矿矿山土地复垦与地质环境保护治理方案
- 班级管理常规优质课件
- IT运维服务方案信息运维服务方案
- ZSL1000、ZSL750塔吊外挂架施工方案
- 文化自信作文800字议论文
- GB/T 28287-2012足部防护鞋防滑性测试方法
- GB/T 27677-2017铝中间合金
- GB/T 19627-2005粒度分析光子相关光谱法
- 芜湖宜盛置业发展有限公司招聘3名编外工作人员(必考题)模拟卷
- 混凝土结构设计原理教学教案
- 齿轨卡轨车课件
评论
0/150
提交评论