1. #include <stdio.h>
  2. #include <winsock2.h>
  3. #include <stdlib.h>
  4. #include <string.h> 
  5. #pragma comment(lib,"ws2_32.lib")
  6. #include <pthread.h>
  7. SOCKET sckt;
  8. struct sockaddr_in scktinf;
  9. int flg;
  10. int n;
  11. int i;
  12. int rmRcv();
  13. int rmSnd();
  14. int rmLg();
  15. int rmAnlz(char *);
  16. char *IMPSTNMR="_IMPSTNMR@";
  17. char *CNTNT="@";
  18. int rmAnlz(char *strg)
  19. {
  20. int t;
  21. //printf("%s\n",strg);
  22. switch(strg[0])
  23. {
  24. case '@':
  25. {
  26. printf("SERVER%s\n",strg);
  27. return 3;
  28. break;
  29. }
  30. case '_':
  31. {
  32. if (strstr(strg,"_IMPSTNMR@")!=NULL)
  33. {
  34. //i=
  35. printf("SERVER_NMR@%s\n",strg+10);
  36. i=strtol(strg+9,NULL,10);
  37. }
  38. //i=
  39. return 0;
  40. break;
  41. }
  42. case '*':
  43. {
  44. t=strtol(strg+1,NULL,10);
  45. printf("*%d@%s\n",t,strchr(strg,'@')+1);
  46. return 3;
  47. break;
  48. }
  49. default:
  50. return -1;
  51. }
  52. }
  53. int rmRcv()
  54. {
  55. char *strg;
  56. pthread_t *pThrdAnlz;
  57. while (1)
  58. {
  59. strg=malloc(0x1000);
  60. memset(strg,0,0x1000);
  61. while (flg==1 && recv(sckt,strg,0x1000,0)>=0)
  62. {
  63. //printf("SERVER:%s\n",strg);
  64. pthread_create(NULL,NULL,rmAnlz,strg);
  65. //
  66. }
  67. }
  68. }
  69. int rmSnd()
  70. {
  71. char strg[0x1000],strg2[0x1000];
  72. int n;
  73. while (1)
  74. {
  75. gets(strg);
  76. //sprintf(strg,"%d@%s",n,strg2);
  77. send(sckt,strg,strlen(strg),0); 
  78.  
  79. }
  80. }
  81. int rmLg()
  82. {
  83. while (connect(sckt,&scktinf,sizeof(scktinf))<0);
  84. //printf("CONNECTED\n");
  85. flg=1;
  86. //char tNmr[0x10];
  87. //recv(sckt,tNmr,0x10,0);
  88. //printf("SISTEMA@%s\n",tNmr);
  89. //n=atoi(tNmr);
  90. pthread_t thrdSnd,thrdRcv;
  91. pthread_create(&thrdSnd,NULL,rmSnd,NULL);
  92. pthread_create(&thrdRcv,NULL,rmRcv,NULL);
  93. pthread_join(thrdSnd,NULL);
  94. pthread_join(thrdRcv,NULL);
  95. //pthread_create(&thrdRcv,NULL,rmRcv,NULL);
  96. }
  97. int main() 
  98. {
  99. WSADATA WSD;
  100. WSAStartup(MAKEWORD(2,2),&WSD);
  101. char adrs[0x20];
  102. //scanf("DIGITAL ");
  103. scanf("%s",adrs); 
  104. while (adrs[strlen(adrs)-1]=='\r' || adrs[strlen(adrs)-1]=='\n'
  105. {
  106. adrs[strlen(adrs)-1]='\0';
  107. }
  108. scktinf.sin_addr.s_addr=inet_addr(adrs);
  109. scktinf.sin_port=htons(2070);
  110. scktinf.sin_family=2;
  111.  
  112. sckt=socket(2,1,0);
  113. pthread_t thrdLg;
  114. pthread_create(&thrdLg,NULL,rmLg,NULL);
  115. pthread_join(thrdLg,NULL);
  116. //pthread_t thrdRcv,thrdSnd;
  117. //pthread_create(&thrdRcv,NULL,rmRcv,NULL);
  118. //pthread_create(&thrdSnd,NULL,rmSnd,NULL);
  119. //pthread_join(thrdRcv,NULL);
  120. //pthread_join(thrdSnd,NULL);
  121. }

服务端:

  1. #include <stdio.h>
  2. #include <malloc.h>
  3. #include <winsock2.h>
  4. #pragma comment(lib,"ws2_32.lib")
  5. #include <pthread.h>
  6. SOCKET sckt;
  7. struct sockaddr_in scktinf;
  8. //SOCKET clnt;
  9. struct clntStrc
  10. {
  11. int nmr;
  12. char nm[0x20];
  13. SOCKET sckt;
  14. }clntAr[100];
  15. int flg;
  16. int rmSnd();
  17. int rmRcv(struct clntStrc *);
  18. int rmLstn();
  19. char *IMPSTNMR="_IMPSTNMR@%d";
  20. int c;
  21. int rmRcv(struct clntStrc *clnt)
  22. {
  23. char strg[0x1000],strg2[0x1000];
  24. int f;
  25. //pthread_t thrSnd;
  26. //pthread_create(&thrRcv,NULL,rmSnd,sckt);
  27. int t;
  28. int n;
  29. while (1)
  30. {
  31. f=recv(clnt->sckt,strg,0x100,0);
  32. //printf("%s\n",strg);
  33. if (f<0break;
  34. switch(strg[0])
  35. {
  36. case '&':
  37. {
  38. t=strtol(strg+1,NULL,10);
  39. sprintf(strg2,"*%d%s\n",clnt->nmr,strchr(strg,'@'));
  40. send(clntAr[t].sckt,strg2,strlen(strg),0); 
  41. break;
  42. }
  43. default:
  44. {
  45. printf("CLIENT#%d:%s\n",clnt->nmr,strg);
  46. strcpy(strg,"");
  47. }
  48. }
  49. //clnt=accept(sckt,NULL,NULL);
  50. //flg=1;
  51. /*
  52. f=-1;
  53. if (recv(clnt->sckt,strg,0x100,0)>=0)
  54. {
  55. printf("CLIENT#%d:%s\n",clnt->nmr,strg);
  56. strcpy(strg,"");
  57. }
  58. */
  59. }
  60. }
  61. int rmSnd()
  62. {
  63. char strg[0x1000],strg2[0x1000];
  64. int n;
  65. while (1)
  66. {
  67. gets(strg);
  68. switch (strg[0])
  69. {
  70. case '&':
  71. {
  72. n=strtol(strg+1,NULL,10);
  73. strcpy(strg2,strchr(strg,'@'));
  74. //printf("ECHO:%s\n",strg2);
  75. send(clntAr[n].sckt,strg2,strlen(strg2),0);
  76. }
  77. case '_':
  78. {
  79. }
  80. }
  81. //sprintf(strg,"%d@%s",n,strg2);
  82. //if (send(sckt,strg,strlen(strg),0)>=0)
  83. //{
  84. // flg=1;
  85. //}
  86.  
  87. }
  88. }
  89. int rmLstn()
  90. {
  91. SOCKET clnt,tclnt;
  92. c=0;
  93. char strg[0x1000];
  94. char tNmr[0x10];
  95. int f;
  96. pthread_t thrRcv,thrSnd;
  97. pthread_create(&thrSnd,NULL,rmSnd,NULL);
  98. SOCKET *tClnt;
  99. int tLen=sizeof(scktinf);
  100. char msgNmr[0x1000];
  101. while (1)
  102. {
  103. c+=1;
  104. clntAr[c].sckt=accept(sckt,&scktinf,&tLen);
  105. clntAr[c].nmr=c;
  106. //memcpy()
  107. //tClnt=malloc(sizeof(SOCKET));
  108. //memcpy(tClnt,&clnt,sizeof(SOCKET));
  109. pthread_create(&thrRcv,NULL,rmRcv,clntAr+c);
  110. sprintf(msgNmr,IMPSTNMR,c);
  111. send(clntAr[c].sckt,msgNmr,strlen(msgNmr),0);
  112. /*
  113. if (clnt>=0)
  114. {
  115. //printf("LEGATO#%d\n",clnt&0xFF);
  116. //printf("LEGATO\n");
  117. //c++;
  118. //itoa(c,tNmr,10);
  119. //while (send(clnt,tNmr,strlen(tNmr),0)<0);
  120. //f=recv(clnt,strg,0x1000,0);
  121. //pthread_create(&thrSnd,NULL,rmSnd,clnt);
  122. }
  123. */
  124. }
  125.  } 
  126.  
  127. int main() 
  128. {
  129. WSADATA WSD;
  130. WSAStartup(MAKEWORD(2,2),&WSD);
  131. char adrs[0x20];
  132. scanf("%s",adrs);
  133. while (adrs[strlen(adrs)-1]=='\r' || adrs[strlen(adrs)-1]=='\n'
  134. {
  135. adrs[strlen(adrs)-1]='\0';
  136. }
  137. scktinf.sin_addr.s_addr=inet_addr(adrs);
  138. scktinf.sin_port=htons(2070);
  139. scktinf.sin_family=2;
  140.  
  141. sckt=socket(2,1,0);
  142. bind(sckt,&scktinf,sizeof(scktinf));
  143. listen(sckt,10);
  144. flg=0;
  145. pthread_t thrdLstn;
  146. pthread_create(&thrdLstn,NULL,rmLstn,NULL);
  147. pthread_join(thrdLstn,NULL);
  148. //pthread_t thrdRcv,thrdSnd;
  149. //pthread_create(&thrdRcv,NULL,rmRcv,NULL);
  150. //pthread_create(&thrdSnd,NULL,rmSnd,NULL); 
  151. //pthread_join(thrdRcv,NULL);
  152. //pthread_join(thrdSnd,NULL);
  153. }