免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 16624 | 回复: 4
打印 上一主题 下一主题

[Linux] socket通信,谁能运行一下附件的3个程序并截图 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2018-12-07 14:04 |只看该作者 |倒序浏览
三个程序,服务端,客户端,中间件

论坛徽章:
0
2 [报告]
发表于 2018-12-07 14:06 |只看该作者
  1. #include <stdio.h>
  2. #include <sys/types.h>
  3. #include <sys/socket.h>
  4. #include <netinet/in.h>
  5. #include <netdb.h>
  6. #define        rec_length 20
  7. int main(int argc,char **argv)
  8. {
  9.         struct hostent *hp; struct sockaddr_in sin; struct servent *sp; char        buf[50];
  10.         int        s,pid;
  11.         char *service,*dest;
  12.         if(argc!=1)
  13.         {
  14.                 service=argv[1]; dest=argv[2];
  15.         }
  16.         else
  17.         {
  18.                 fprintf(stderr,"NO service assigned!\nUsage:");
  19.                 fprintf(stderr,"%s service_name destination!\n",argv[0]);
  20.                 fprintf(stderr,"Note: service_name is        defined        in /etc/services\n");
  21.                 fprintf(stderr," destination is defined in /etc/hosts\n");
  22.                 exit(-1);
  23.         }
  24.         if((sp=getservbyname(service,"tcp"))==NULL)
  25.         {
  26.                 fprintf(stderr,"Error: getservbyname"); exit(-5);
  27.         }
  28.         if((hp=gethostbyname(dest))==0)
  29.         {
  30.                 fprintf(stderr,"Error: gethostbyname"); exit(-6);
  31.         }
  32.         bzero(&sin,sizeof(sin));
  33.         bcopy(hp->h_addr,&sin.sin_addr,hp->h_length);
  34.         sin.sin_family=hp->h_addrtype; sin.sin_port=sp->s_port;
  35.         if((s=socket(AF_INET,SOCK_STREAM,0))==-1)
  36.         {
  37.                 fprintf(stderr,"Error: socket"); exit(-6);
  38.         }
  39.         if(connect(s,&sin,sizeof(sin))==-1)
  40.         {
  41.                 fprintf(stderr,"Error: connect");
  42.                 close(s);
  43.                 exit(-6);
  44.         }
  45.         // next 2 Line build request message pid=getpid();
  46.         sprintf(buf,"%5.5d%5.5d%5.5d%5.5d\n",pid,pid*2,pid*3,pid*4);
  47.         fprintf(stderr,"%s is sending request message:        %s\n",argv[0],buf);
  48.         if(write(s,buf,rec_length)!=rec_length){ //to server
  49.                 fprintf(stderr,"Write Socket s ERROR\n!"); close(s); exit(-1);
  50.         }
  51.         if(read(s,buf,rec_length)==0){ //get replay from server fprintf(stderr,"Read Socket s Error\n");
  52.                 close(s); exit(-2);
  53.         }
  54.         printf("%s get reply: %s\n",argv[0],buf); close(s);
  55.         exit(0);
  56. }
复制代码

论坛徽章:
0
3 [报告]
发表于 2018-12-07 14:06 |只看该作者
  1. #include <stdio.h>
  2. #include <sys/types.h>
  3. #include <sys/socket.h>
  4. #include <netinet/in.h>
  5. #include <netdb.h>
  6. #define rec_length        20
  7. main(int argc, char **argv )
  8. {
  9.         struct sockaddr_in sin; struct servent *sp;
  10.         int s,ns,pid; char        buf[50]; char *service;
  11.         if(argc!=1) service=argv[1];
  12.         else {
  13.                 fprintf(stderr,"NO service assigned!\nUsage:\n"); fprintf(stderr,"\t%s server_name!\n",argv[0]);
  14.                 fprintf(stderr,"Note: server_name is defined in file/etc/services\n");
  15.                 exit(-1);
  16.         }
  17.         if((sp=getservbyname(service,"tcp"))==NULL){ fprintf(stderr,"Error: getservbyname"); exit(-5);}
  18.         if((s=socket(AF_INET,SOCK_STREAM,0))==-1){
  19.                 fprintf(stderr,"Error: socket create"); exit(-6);
  20.         }
  21.         bzero(&sin,sizeof(sin)); sin.sin_port=sp->s_port;
  22.         if(bind(s,&sin,sizeof(sin))==-1){
  23.                 fprintf(stderr,"Error: bind"); close(s); exit(-6);
  24.         }
  25.         if(listen(s,5)==-1){
  26.                 fprintf(stderr,"Error: listen"); close(s); exit(-6);
  27.         }
  28.         while(1){
  29.                 fprintf(stderr,"\n\t\t\t        Now wait connect ...\n");
  30.                 if((ns=accept(s,0,0))==-1){ // wait a connection */
  31.                         fprintf(stderr,"error: accept"); continue;
  32.                 }
  33.                 if((pid=fork())==-1){ // conneted, and then create child proc
  34.                         fprintf(stderr,"server: fork error!");
  35.                         close(s); exit(-1);
  36.                 }
  37.                 if(pid!=0){ //parent proce, nothing to do, and to the next loop
  38.                         close(ns);wait(0);continue;
  39.                 }
  40.                 if(pid==0){ // entered child proccedure close(s);
  41.                         printf("Receive a client connect:%s\n",argv[1]);
  42.                         if(read(ns,buf,rec_length)==0){
  43.                                 fprintf(stderr,"Read nothing from socket:ns\n"); close(ns); exit(-3);
  44.                         }
  45.                         printf("%s get message from ns:        %s\n",argv[0],buf);
  46.                         sprintf(buf,"%5.5d%5.5d%5.5d%5.5d\n",pid,pid*2,pid*3,pid*4); fprintf(stderr,"And, %s replay to client: %s\n",argv[0],buf);
  47.                         if(write(ns,buf,rec_length)!=rec_length){
  48.                                 fprintf(stderr,"Write socket ns error!\n"); close(ns); exit(-4);
  49.                         }
  50.                         close(ns); exit(0);
  51.                 }
  52.         }
  53. }
复制代码

论坛徽章:
0
4 [报告]
发表于 2018-12-07 14:06 |只看该作者
  1. #include <stdio.h>
  2. #include <sys/types.h>
  3. #include <sys/socket.h>
  4. #include <netinet/in.h>
  5. #include <netdb.h>
  6. #define rec_length 20
  7. main(int argc, char **argv )
  8. {
  9.         // structure defined for request as a client
  10.         struct hostent *hp1;
  11.         struct sockaddr_in sin1; struct servent *sp1; char sbuf[50];
  12.         int ss,spid;
  13.         char        *sservice,*sdest;
  14.         // structure defined for request as a server
  15.         struct sockaddr_in sin;
  16.         struct servent *sp; int s,ns,pid;
  17.         char        buf[50]; char        *service;
  18.         // test the environment parameter: lservice, dservice, server_name
  19.         if(argc==4){ service=argv[1];sservice=argv[2]; sdest=argv[3];} else {
  20.                 fprintf(stderr,"Parameter assigned Error!\nUsage:\n");
  21.                 fprintf(stderr,"\t%s lservice dservice server_name!\n",argv[0]);
  22.                 fprintf(stderr,"Note: server_name is defined        in file/etc/hosts\n");
  23.                 fprintf(stderr,"and: lservice dservice are defined in file /etc/services\n");
  24.                 exit(-1);
  25.         }
  26.         if((sp=getservbyname(service,"tcp"))==NULL){
  27.                 fprintf(stderr,"Error: getservbyname"); exit(-5);
  28.         }
  29.         if((s=socket(AF_INET,SOCK_STREAM,0))==-1){
  30.                 fprintf(stderr,"Error: socket create"); exit(-6);
  31.         }
  32.         bzero(&sin,sizeof(sin)); sin.sin_port=sp->s_port;
  33.         if(bind(s,&sin,sizeof(sin))==-1){
  34.                 fprintf(stderr,"Error: bind"); close(s); exit(-6);
  35.         }
  36.         if(listen(s,5)==-1){
  37.                 fprintf(stderr,"Error: listen"); close(s); exit(-6);
  38.         }
  39.         while(1){
  40.                 fprintf(stderr,"\n\t\t\t        Now wait connect ...\n");
  41.                 if((ns=accept(s,0,0))==-1){ // wait a connection */
  42.                         fprintf(stderr,"error: accept"); continue;
  43.                 }
  44.                 if((pid=fork())==-1){ // conneted, and then create child proc
  45.                         fprintf(stderr,"server: fork error!"); close(s); exit(-1);
  46.                 }
  47.                 if(pid!=0){ //parent proce, nothing to do, and to the next loop
  48.                         close(ns);wait(0);continue;
  49.                 }
  50.                 if(pid==0){ // entered child proccedure
  51.                         close(s);
  52.                         printf("Receive a client connect:%s\n",argv[1]);
  53.                         if(read(ns,buf,rec_length)==0){
  54.                                 fprintf(stderr,"Read nothing from socket:ns\n"); close(ns); exit(-3);
  55.                         }
  56.                         printf("%s get message from ns:        %s\n",argv[0],buf);
  57. // request message got from the Client.
  58. // Begine a Connection to Server as a Client
  59.                         if((sp1=getservbyname(sservice,"tcp"))==NULL){
  60.                                 fprintf(stderr,"Error: getservbyname s1"); exit(-5);
  61.                         }
  62.                         if((hp1=gethostbyname(sdest))==0){
  63.                                 fprintf(stderr,"Error: gethostbyname s1"); exit(-6);
  64.                         }
  65.                         bzero(&sin1,sizeof(sin1));
  66.                         bcopy(hp1->h_addr,&sin1.sin_addr,hp1->h_length);
  67.                         sin1.sin_family=hp1->h_addrtype; sin1.sin_port=sp1->s_port;
  68.                         if((ss=socket(AF_INET,SOCK_STREAM,0))==-1){
  69.                                 fprintf(stderr,"Error: socket s1"); exit(-6);
  70.                         }
  71.                         if(connect(ss,&sin1,sizeof(sin1))==-1){ fprintf(stderr,"Error: connect s1"); close(ss); exit(-6);
  72.                         }
  73. // next 2 Line build request message
  74.         spid=getpid();

  75. sprintf(sbuf,"%5.5d%5.5d%5.5d%5.5d",spid,spid*2,spid*3,spid*4);
  76. fprintf(stderr,"%s is sending request        message: %s s1\n",argv[0],sbuf);
  77. if(write(ss,sbuf,rec_length)!=rec_length){ //to server

  78. fprintf(stderr,"Write Socket ss ERROR! s1\n"); close(ss); exit(-1);
  79. }
  80. if(read(ss,sbuf,rec_length)==0){ //from server
  81.         fprintf(stderr,"Read Socket ss Error! s1\n"); close(ss); exit(-2);
  82. }
  83. printf("%s get reply: %s\n",argv[0],sbuf); close(ss);
  84. // End the Communication with my Server
  85. // Next 2 Line, build a replay Message buf, and write it back
  86.         pid=getpid();

  87. sprintf(buf,"%5.5d%5.5d%5.5d%5.5d",pid,pid*2,pid*3,pid*4); fprintf(stderr," and, send it back to client: %s\n",buf);
  88.         if(write(ns,buf,rec_length)!=rec_length){ fprintf(stderr,"Write socket ns error!\n");
  89.                 close(ns); exit(-4);
  90.         }
  91. close(ns); exit(0);
  92. }
  93. }
  94. }
复制代码

论坛徽章:
0
5 [报告]
发表于 2018-12-07 14:07 |只看该作者
依次是客户端,服务端,中间件的三个程序
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP