linux:

tcpclient.cpp

  1. #include<iostream>
  2. #include<unistd.h>
  3. #include<sys/types.h>
  4. #include<sys/socket.h>
  5. #include<netdb.h>
  6. #include<arpa/inet.h>
  7. #include<cstring>
  8. #include<sstream>
  9.  
  10. using namespace std;
  11.  
  12. #define BUFSIZE 512
  13.  
  14. // #define SERVERIP "192.168.41.32"
  15. // #define SERVERPORT 4140
  16.  
  17. /*error report*/
  18. static void bail(const char *on_what){
  19. fputs(strerror(errno), stderr);
  20. fputs(": ", stderr);
  21. fputs(on_what, stderr);
  22. fputc('\n', stderr);
  23. exit();
  24. }
  25.  
  26. void getarg(int argc,char* argv[],const char** SERVERIP,int* SERVERPORT)
  27. {
  28. for(int i=;i<argc;i++)
  29. {
  30. istringstream iss(argv[i]);
  31. string str;
  32. iss>>str;
  33. if(str=="ip")
  34. {
  35. *SERVERIP=argv[i+];
  36. }
  37. else if(str=="port")
  38. {
  39. istringstream sts(argv[i+]);
  40. string s_port;
  41. sts>>s_port;
  42. *SERVERPORT=stoi(s_port);
  43. }
  44. else
  45. {
  46.  
  47. }
  48.  
  49. }
  50. }
  51.  
  52. int main(int argc,char *argv[])
  53. {
  54. const char* SERVERIP="192.168.43.230";
  55. int SERVERPORT=;
  56.  
  57. getarg(argc,argv,&SERVERIP,&SERVERPORT);
  58.  
  59. int sockfd;
  60. struct sockaddr_in server_addr;
  61. const char* sendbuf = (char*)"hello,this is client";
  62. char recvbuf[BUFSIZE];
  63.  
  64. //create socket
  65. if ((sockfd = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)) <)//创建套接字
  66. {
  67. fprintf(stderr,"Socket error %s\n",strerror(errno));
  68. exit(-);
  69. }
  70.  
  71. memset(&server_addr,, sizeof(server_addr));
  72. server_addr.sin_family = AF_INET;
  73. server_addr.sin_port = htons(SERVERPORT);
  74. server_addr.sin_addr.s_addr = inet_addr(SERVERIP);
  75.  
  76. if ((connect(sockfd, (struct sockaddr*) & server_addr, sizeof(struct sockaddr))) < )//连接远程对等实体
  77. {
  78. fprintf(stderr,"connect error %s\n",strerror(errno));
  79. exit(-);
  80. }
  81.  
  82. if ((send(sockfd, sendbuf, strlen(sendbuf), )) != strlen(sendbuf))//发送数据
  83. {
  84. fprintf(stderr,"send error %s\n",strerror(errno));
  85. exit(-);
  86. }
  87.  
  88. memset(recvbuf, '\0',sizeof(recvbuf));
  89. while (true)
  90. {
  91. int num = recv(sockfd, recvbuf, sizeof(recvbuf), );//接受数据
  92. if (num < )
  93. {
  94. fprintf(stderr,"recv error %s\n",strerror(errno));
  95. exit(-);
  96. }
  97. else
  98. {
  99. cout << recvbuf << endl;
  100. break;
  101. }
  102. }
  103.  
  104. cout<<"exit..."<<endl;
  105.  
  106. close(sockfd);//终止通信并释放套接字描述符
  107.  
  108. return ;
  109. }

tcpserv.cpp

  1. #include<iostream>
  2. #include<string.h>
  3. #include <unistd.h>
  4. #include<sys/types.h>
  5. #include<sys/socket.h>
  6. #include<netdb.h>
  7. #include<arpa/inet.h>
  8.  
  9. #define BUFSIZE 512
  10. #define PORT 4140
  11. #define MAXLISTEN 128
  12.  
  13. /*error report*/
  14. static void bail(const char *on_what){
  15. fputs(strerror(errno), stderr);
  16. fputs(": ", stderr);
  17. fputs(on_what, stderr);
  18. fputc('\n', stderr);
  19. exit();
  20. }
  21.  
  22. int main()
  23. {
  24. int sockfd;//server fd
  25. // int port;
  26. int newfd;//connect fd
  27. struct sockaddr_in server_addr;
  28. struct sockaddr_in client_addr;
  29.  
  30. char reqbuf[BUFSIZE];
  31.  
  32. /*create server socket*/
  33. if((sockfd=socket(AF_INET,SOCK_STREAM,))<)//创建套接字
  34. {
  35. fprintf(stderr,"Socket error %s\n",strerror(errno));
  36. exit(-);
  37. }
  38.  
  39. /*ready for server addr*/
  40. memset(&server_addr,,sizeof(server_addr));
  41. server_addr.sin_family=AF_INET;
  42. server_addr.sin_addr.s_addr=htonl(INADDR_ANY);
  43. server_addr.sin_port=htons(PORT);
  44.  
  45. /*bind socket addr*/
  46. int tmp=bind(sockfd,(struct sockaddr*)&server_addr,sizeof(server_addr));//将ip和port绑定到套接字上
  47. if(tmp<)
  48. {
  49. fprintf(stderr,"Bind error %s\n",strerror(errno));
  50. exit(-);
  51. }
  52.  
  53. /*listen*/
  54. if((listen(sockfd,MAXLISTEN))<)//将套接字设置为被动模式
  55. {
  56. fprintf(stderr,"Listen error %s\n",strerror(errno));
  57. exit(-);
  58. }
  59. std::cout<<"waiting for client ..."<<std::endl;
  60.  
  61. /*server main while*/
  62. // while(true)
  63. // {
  64. socklen_t size;
  65. size=sizeof(struct sockaddr_in);
  66.  
  67. /*accept client & create new fd*/
  68. if((newfd=accept(sockfd,(struct sockaddr*)&client_addr,&size))<)//接受传入连接请求
  69. {
  70. fprintf(stderr,"Accept error %s\n",strerror(errno));
  71. exit(-);
  72. }
  73. std::cout<<"Server got connect from "<<inet_ntoa(client_addr.sin_addr)<<std::endl;
  74.  
  75. /*recv data from client*/
  76. if((recv(newfd,reqbuf,sizeof(reqbuf),))<)//获取数据
  77. {
  78. fprintf(stderr,"Recv error %s\n",strerror(errno));
  79. exit(-);
  80. }
  81. std::cout<<reqbuf<<std::endl;
  82.  
  83. /*send data to client*/
  84. char *sendbuf=(char*)"hello,this is server.";
  85. if((send(newfd,sendbuf,strlen(sendbuf),))!=strlen(sendbuf))//发送数据
  86. {
  87. fprintf(stderr,"Send error %s\n",strerror(errno));
  88. exit(-);
  89. }
  90.  
  91. /*close new fd*/
  92. close(newfd);//终止通信并释放套接字描述符
  93. // }
  94.  
  95. /*close server fd*/
  96. close(sockfd);//释放套接字描述符
  97.  
  98. std::cout<<"exit"<<std::endl;
  99.  
  100. return ;
  101. }

udpclient.cpp

  1. #include<iostream>
  2. #include <unistd.h>
  3. #include<sys/types.h>
  4. #include<sys/socket.h>
  5. #include<netdb.h>
  6. #include<arpa/inet.h>
  7. #include<cstring>
  8. #include<sstream>
  9.  
  10. using namespace std;
  11.  
  12. #define BUFSIZE 512
  13.  
  14. // #define SERVERIP "192.168.2.169"
  15. // #define SERVERPORT 4140
  16.  
  17. /*error report*/
  18. static void bail(const char *on_what){
  19. fputs(strerror(errno), stderr);
  20. fputs(": ", stderr);
  21. fputs(on_what, stderr);
  22. fputc('\n', stderr);
  23. exit();
  24. }
  25.  
  26. void getarg(int argc,char* argv[],const char** SERVERIP,int* SERVERPORT)
  27. {
  28. for(int i=;i<argc;i++)
  29. {
  30. istringstream iss(argv[i]);
  31. string str;
  32. iss>>str;
  33. if(str=="ip")
  34. {
  35. *SERVERIP=argv[i+];
  36. }
  37. else if(str=="port")
  38. {
  39. istringstream sts(argv[i+]);
  40. string s_port;
  41. sts>>s_port;
  42. *SERVERPORT=stoi(s_port);
  43. }
  44. else
  45. {
  46.  
  47. }
  48.  
  49. }
  50. }
  51.  
  52. int main(int argc,char* argv[])
  53. {
  54. const char* SERVERIP="192.168.41.32";
  55. int SERVERPORT=;
  56.  
  57. getarg(argc,argv,&SERVERIP,&SERVERPORT);
  58.  
  59. int sockfd;
  60. struct sockaddr_in server_addr;
  61. struct sockaddr_in client_addr;
  62. char* sendbuf = (char*)"hello,this is client";
  63. char recvbuf[BUFSIZE];
  64.  
  65. //create socket
  66. if ((sockfd = socket(AF_INET, SOCK_DGRAM,)) <)//创建套接字描述符
  67. {
  68. fprintf(stderr,"socket error %s\n",strerror(errno));
  69. exit(-);
  70. }
  71.  
  72. memset(&server_addr, ,sizeof(server_addr));
  73. server_addr.sin_family = AF_INET;
  74. server_addr.sin_port = htons(SERVERPORT);
  75. server_addr.sin_addr.s_addr = inet_addr(SERVERIP);
  76.  
  77. // if ((connect(sockfd, (struct sockaddr*) & server_addr, sizeof(struct sockaddr))) < 0)
  78. // {
  79. // cout << "Connect Error::" << GetLastError() << endl;
  80. // return -1;
  81. // }
  82.  
  83. if ((sendto(sockfd, sendbuf, strlen(sendbuf), ,(struct sockaddr*)&server_addr,sizeof(struct sockaddr_in))) != strlen(sendbuf))//发送数据
  84. {
  85. fprintf(stderr,"sendto error %s\n",strerror(errno));
  86. exit(-);;
  87. }
  88.  
  89. memset(&client_addr,,sizeof(client_addr));
  90. memset(recvbuf, '\0',sizeof(recvbuf));
  91. while (true)
  92. {
  93. socklen_t len=sizeof(struct sockaddr_in);
  94. int num = recvfrom(sockfd, recvbuf, sizeof(recvbuf), ,(struct sockaddr*)&client_addr,&len);//获取数据
  95. if (num < )
  96. {
  97. fprintf(stderr,"Socket error %s\n",strerror(errno));
  98. exit(-);
  99. }
  100. else
  101. {
  102. cout << recvbuf << endl;
  103. break;
  104. }
  105. }
  106.  
  107. close(sockfd);//终止通信并释放套接字描述符
  108.  
  109. return ;
  110. }

udpserv.cpp

  1. #include<iostream>
  2. #include<string.h>
  3. #include <unistd.h>
  4. #include<sys/types.h>
  5. #include<sys/socket.h>
  6. #include<netdb.h>
  7. #include<arpa/inet.h>
  8. // #include<signal.h>
  9.  
  10. #define BUFSIZE 512
  11. #define PORT 4140
  12. #define MAXLISTEN 128
  13.  
  14. /*error report*/
  15. static void bail(const char *on_what){
  16. fputs(strerror(errno), stderr);
  17. fputs(": ", stderr);
  18. fputs(on_what, stderr);
  19. fputc('\n', stderr);
  20. exit();
  21. }
  22.  
  23. int main()
  24. {
  25. int sockfd;//server fd
  26. // int port;
  27. int newfd;//connect fd
  28. struct sockaddr_in server_addr;
  29. struct sockaddr_in client_addr;
  30.  
  31. char reqbuf[BUFSIZE];
  32.  
  33. /*create server socket*/
  34. if((sockfd=socket(AF_INET,SOCK_DGRAM,))<)//创建套接字描述符
  35. {
  36. fprintf(stderr,"Socket error %s\n",strerror(errno));
  37. exit(-);
  38. }
  39.  
  40. /*ready for server addr*/
  41. memset(&server_addr,,sizeof(server_addr));
  42. server_addr.sin_family=AF_INET;
  43. server_addr.sin_addr.s_addr=htonl(INADDR_ANY);
  44. server_addr.sin_port=htons(PORT);
  45.  
  46. /*bind socket addr*/
  47. if((bind(sockfd,(struct sockaddr*)&server_addr,sizeof(server_addr)))<)//将ip和port绑定到套接字上
  48. {
  49. fprintf(stderr,"Bind error %s\n",strerror(errno));
  50. exit(-);
  51. }
  52.  
  53. /*server main while*/
  54. // while(true)
  55. // {
  56. socklen_t size;
  57. size=sizeof(struct sockaddr_in);
  58. memset(&client_addr,,sizeof(client_addr));
  59.  
  60. /*recv data from client*/
  61. if((recvfrom(sockfd,reqbuf,sizeof(reqbuf),,(struct sockaddr*)&client_addr,&size))<)//获取数据
  62. {
  63. fprintf(stderr,"Recvfrom error %s\n",strerror(errno));
  64. exit(-);
  65. }
  66. std::cout<<reqbuf<<std::endl;
  67.  
  68. /*send data to client*/
  69. char *sendbuf=(char*)"hello,this is server.";
  70. if((sendto(sockfd,sendbuf,strlen(sendbuf),,(struct sockaddr*)&client_addr,size))!=strlen(sendbuf))//发送数据
  71. {
  72. fprintf(stderr,"Sendto error %s\n",strerror(errno));
  73. exit(-);
  74. }
  75.  
  76. // }
  77.  
  78. /*close server fd*/
  79. close(sockfd);//终止通信并释放套接字描述符
  80.  
  81. std::cout<<"exit"<<std::endl;
  82.  
  83. return ;
  84. }

windows:

tcpclient.cpp

  1. #include<iostream>
  2. #include<WinSock2.h>
  3. #include<cstring>
  4. #include<sstream>
  5.  
  6. #pragma comment(lib, "ws2_32")
  7.  
  8. using namespace std;
  9.  
  10. // #define SERVERIP "192.168.41.32"
  11. // #define SERVERPORT 4140
  12.  
  13. void getarg(int argc,char* argv[],const char** SERVERIP,int* SERVERPORT)
  14. {
  15. for(int i=;i<argc;i++)
  16. {
  17. istringstream iss(argv[i]);
  18. string str;
  19. iss>>str;
  20. if(str=="ip")
  21. {
  22. *SERVERIP=argv[i+];
  23. }
  24. else if(str=="port")
  25. {
  26. istringstream sts(argv[i+]);
  27. string s_port;
  28. sts>>s_port;
  29. *SERVERPORT=stoi(s_port);
  30. }
  31. else
  32. {
  33.  
  34. }
  35.  
  36. }
  37. }
  38.  
  39. int main(int argc,char *argv[])
  40. {
  41. const char* SERVERIP="192.168.41.32";
  42. int SERVERPORT=;
  43.  
  44. getarg(argc,argv,&SERVERIP,&SERVERPORT);
  45.  
  46. SOCKET sockfd;
  47. struct sockaddr_in server_addr;
  48. WSADATA ws;
  49. const char* sendbuf = (char*)"hello,this is client";
  50. char recvbuf[MAX_PATH];
  51.  
  52. //init windows socket
  53. if (WSAStartup(MAKEWORD(, ), &ws) != )
  54. {
  55. cout << "Init Windows Socket Failed::" << GetLastError() << endl;
  56. return -;
  57. }
  58.  
  59. //create socket
  60. if ((sockfd = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)) == INVALID_SOCKET)//创建套接字描述符
  61. {
  62. cout << "Create Socket Failed::" << GetLastError() << endl;
  63. return -;
  64. }
  65.  
  66. ZeroMemory(&server_addr, sizeof(server_addr));
  67. server_addr.sin_family = AF_INET;
  68. server_addr.sin_port = htons(SERVERPORT);
  69. server_addr.sin_addr.S_un.S_addr = inet_addr(SERVERIP);
  70.  
  71. if ((connect(sockfd, (struct sockaddr*) & server_addr, sizeof(struct sockaddr))) < )//连接远程对等实体
  72. {
  73. cout << "Connect Error::" << GetLastError() << endl;
  74. return -;
  75. }
  76.  
  77. if ((send(sockfd, sendbuf, strlen(sendbuf), )) != strlen(sendbuf))//发送数据
  78. {
  79. cout << "Send Error::" << GetLastError() << endl;
  80. return -;
  81. }
  82.  
  83. ZeroMemory(recvbuf, sizeof(recvbuf));
  84. while (true)
  85. {
  86. int num = recv(sockfd, recvbuf, sizeof(recvbuf), );//获取数据
  87. if (num < )
  88. {
  89. cout << "Recv Error::" << GetLastError() << endl;
  90. return -;
  91. }
  92. else
  93. {
  94. cout << recvbuf << endl;
  95. break;
  96. }
  97. }
  98.  
  99. cout<<"exit..."<<endl;
  100.  
  101. closesocket(sockfd);//终止通信并释放套接字
  102. WSACleanup();
  103.  
  104. system("pause");
  105.  
  106. return ;
  107. }

tcpserver.cpp

  1. #include<iostream>
  2. #include<WinSock2.h>
  3. // #include<cstring>
  4. // #include<unistd.h>
  5.  
  6. #pragma comment(lib, "ws2_32")
  7.  
  8. using namespace std;
  9.  
  10. #define BUFSIZE 512
  11. #define PORT 4140
  12. #define MAXLISTEN 128
  13.  
  14. /*error report*/
  15. static void bail(const char *on_what){
  16. fputs(strerror(errno), stderr);
  17. fputs(": ", stderr);
  18. fputs(on_what, stderr);
  19. fputc('\n', stderr);
  20. exit();
  21. }
  22.  
  23. int main()
  24. {
  25. SOCKET sockfd;//server fd
  26. // int port;
  27. SOCKET newfd;//connect fd
  28. struct sockaddr_in server_addr;
  29. struct sockaddr_in client_addr;
  30. WSADATA ws;
  31.  
  32. char reqbuf[BUFSIZE];
  33.  
  34. //init windows socket
  35. if(WSAStartup(MAKEWORD(,),&ws)!=)
  36. {
  37. cout << "Init Windows Socket Failed::" << GetLastError() << endl;
  38. exit(-);
  39. }
  40.  
  41. /*create server socket*/
  42. if((sockfd=socket(AF_INET,SOCK_STREAM,))==INVALID_SOCKET)//创建套接字描述符
  43. {
  44. fprintf(stderr,"Socket error %s\n",strerror(errno));
  45. exit(-);
  46. }
  47.  
  48. /*ready for server addr*/
  49. ZeroMemory(&server_addr,sizeof(server_addr));
  50. ZeroMemory(&reqbuf,sizeof(reqbuf));
  51. server_addr.sin_family=AF_INET;
  52. server_addr.sin_addr.S_un.S_addr=htonl(INADDR_ANY);
  53. server_addr.sin_port=htons(PORT);
  54.  
  55. /*bind socket addr*/
  56. int tmp=bind(sockfd,(struct sockaddr*)&server_addr,sizeof(server_addr));//将ip和port绑定到套接字上
  57. if(tmp<)
  58. {
  59. fprintf(stderr,"Bind error %s\n",strerror(errno));
  60. exit(-);
  61. }
  62.  
  63. /*listen*/
  64. if((listen(sockfd,MAXLISTEN))<)//设置为被动模式
  65. {
  66. fprintf(stderr,"Listen error %s\n",strerror(errno));
  67. exit(-);
  68. }
  69. cout<<"waiting for client ..."<<endl;
  70.  
  71. /*server main while*/
  72. // while(true)
  73. // {
  74. int size;
  75. size=sizeof(struct sockaddr_in);
  76.  
  77. /*accept client & create new fd*/
  78. if((newfd=accept(sockfd,(struct sockaddr*)&client_addr,&size))<)//接受传入请求
  79. {
  80. fprintf(stderr,"Accept error %s\n",strerror(errno));
  81. exit(-);
  82. }
  83. cout<<"Server got connect from "<<inet_ntoa(client_addr.sin_addr)<<endl;
  84.  
  85. /*recv data from client*/
  86. if((recv(newfd,reqbuf,sizeof(reqbuf),))<)//获取数据
  87. {
  88. fprintf(stderr,"Recv error %s\n",strerror(errno));
  89. exit(-);
  90. }
  91. cout<<reqbuf<<endl;
  92.  
  93. /*send data to client*/
  94. char *sendbuf=(char*)"hello,this is server.";
  95. if((send(newfd,sendbuf,strlen(sendbuf),))!=strlen(sendbuf))//发送数据
  96. {
  97. fprintf(stderr,"Send error %s\n",strerror(errno));
  98. exit(-);
  99. }
  100.  
  101. /*close new fd*/
  102. closesocket(newfd);//终止通信并释放套接字
  103. // }
  104.  
  105. /*close server fd*/
  106. closesocket(sockfd);//释放套接字
  107. WSACleanup();
  108.  
  109. cout<<"exit"<<endl;
  110.  
  111. return ;
  112. }

udpclient.cpp

  1. #include<iostream>
  2. #include<WinSock2.h>
  3. #include<sstream>
  4.  
  5. #pragma comment(lib, "ws2_32")
  6.  
  7. using namespace std;
  8.  
  9. // #define SERVERIP "192.168.2.169"
  10. // #define SERVERPORT 4140
  11.  
  12. void getarg(int argc,char* argv[],const char** SERVERIP,int* SERVERPORT)
  13. {
  14. for(int i=;i<argc;i++)
  15. {
  16. istringstream iss(argv[i]);
  17. string str;
  18. iss>>str;
  19. if(str=="ip")
  20. {
  21. *SERVERIP=argv[i+];
  22. }
  23. else if(str=="port")
  24. {
  25. istringstream sts(argv[i+]);
  26. string s_port;
  27. sts>>s_port;
  28. *SERVERPORT=stoi(s_port);
  29. }
  30. else
  31. {
  32.  
  33. }
  34.  
  35. }
  36. }
  37.  
  38. int main(int argc,char* argv[])
  39. {
  40. const char* SERVERIP="192.168.41.32";
  41. int SERVERPORT=;
  42.  
  43. getarg(argc,argv,&SERVERIP,&SERVERPORT);
  44.  
  45. SOCKET sockfd;
  46. struct sockaddr_in server_addr;
  47. struct sockaddr_in client_addr;
  48. WSADATA ws;
  49. char* sendbuf = (char*)"hello,this is client";
  50. char recvbuf[MAX_PATH];
  51.  
  52. //init windows socket
  53. if (WSAStartup(MAKEWORD(, ), &ws) != )
  54. {
  55. cout << "Init Windows Socket Failed::" << GetLastError() << endl;
  56. return -;
  57. }
  58.  
  59. //create socket
  60. if ((sockfd = socket(AF_INET, SOCK_DGRAM,)) == INVALID_SOCKET)//创建套接字描述符
  61. {
  62. cout << "Create Socket Failed::" << GetLastError() << endl;
  63. return -;
  64. }
  65.  
  66. ZeroMemory(&server_addr, sizeof(server_addr));
  67. server_addr.sin_family = AF_INET;
  68. server_addr.sin_port = htons(SERVERPORT);
  69. server_addr.sin_addr.S_un.S_addr = inet_addr(SERVERIP);
  70.  
  71. // if ((connect(sockfd, (struct sockaddr*) & server_addr, sizeof(struct sockaddr))) < 0)
  72. // {
  73. // cout << "Connect Error::" << GetLastError() << endl;
  74. // return -1;
  75. // }
  76.  
  77. if ((sendto(sockfd, sendbuf, strlen(sendbuf), ,(struct sockaddr*)&server_addr,sizeof(struct sockaddr_in))) != strlen(sendbuf))//发送数据
  78. {
  79. cout << "Send Error::" << GetLastError() << endl;
  80. return -;
  81. }
  82.  
  83. ZeroMemory(&client_addr,sizeof(client_addr));
  84. ZeroMemory(recvbuf, sizeof(recvbuf));
  85. while (true)
  86. {
  87. int len=sizeof(struct sockaddr_in);
  88. int num = recvfrom(sockfd, recvbuf, sizeof(recvbuf), ,(struct sockaddr*)&client_addr,&len);//获取数据
  89. if (num < )
  90. {
  91. cout << "Recv Error::" << GetLastError() << endl;
  92. return -;
  93. }
  94. else
  95. {
  96. cout << recvbuf << endl;
  97. break;
  98. }
  99. }
  100.  
  101. closesocket(sockfd);//终止通信并释放套接字
  102. WSACleanup();
  103.  
  104. system("pause");
  105.  
  106. return ;
  107. }

udpserver.cpp

  1. #include<iostream>
  2. #include<winsock2.h>
  3. // #include<string.h>
  4. // #include<unistd.h>
  5.  
  6. #pragma comment(lib, "ws2_32")
  7.  
  8. using namespace std;
  9.  
  10. #define BUFSIZE 512
  11. #define PORT 4140
  12. #define MAXLISTEN 128
  13.  
  14. /*error report*/
  15. static void bail(const char *on_what){
  16. fputs(strerror(errno), stderr);
  17. fputs(": ", stderr);
  18. fputs(on_what, stderr);
  19. fputc('\n', stderr);
  20. exit();
  21. }
  22.  
  23. int main()
  24. {
  25. int sockfd;//server fd
  26. // int port;
  27. int newfd;//connect fd
  28. WSADATA ws;
  29. struct sockaddr_in server_addr;
  30. struct sockaddr_in client_addr;
  31.  
  32. char reqbuf[BUFSIZE];
  33.  
  34. // signal(SIGINT,my_handler);
  35.  
  36. //init windows socket
  37. if(WSAStartup(MAKEWORD(,),&ws)!=)
  38. {
  39. cout << "Init Windows Socket Failed::" << GetLastError() << endl;
  40. exit(-);
  41. }
  42.  
  43. /*create server socket*/
  44. if((sockfd=socket(AF_INET,SOCK_DGRAM,))<)//创建套接字描述符
  45. {
  46. fprintf(stderr,"Socket error %s\n",strerror(errno));
  47. exit(-);
  48. }
  49.  
  50. /*ready for server addr*/
  51. ZeroMemory(&server_addr,sizeof(server_addr));
  52. server_addr.sin_family=AF_INET;
  53. server_addr.sin_addr.S_un.S_addr=htonl(INADDR_ANY);
  54. server_addr.sin_port=htons(PORT);
  55.  
  56. /*bind socket addr*/
  57. if((bind(sockfd,(struct sockaddr*)&server_addr,sizeof(server_addr)))==INVALID_SOCKET)//将ip和port绑定到套接字上
  58. {
  59. fprintf(stderr,"Bind error %s\n",strerror(errno));
  60. exit(-);
  61. }
  62.  
  63. /*server main while*/
  64. // while(true)
  65. // {
  66. int size;
  67. size=sizeof(struct sockaddr_in);
  68. memset(&client_addr,,sizeof(client_addr));
  69.  
  70. /*recv data from client*/
  71. if((recvfrom(sockfd,reqbuf,sizeof(reqbuf),,(struct sockaddr*)&client_addr,&size))<)//获取数据
  72. {
  73. fprintf(stderr,"Recvfrom error %s\n",strerror(errno));
  74. exit(-);
  75. }
  76. cout<<reqbuf<<endl;
  77.  
  78. /*send data to client*/
  79. char *sendbuf=(char*)"hello,this is server.";
  80. if((sendto(sockfd,sendbuf,strlen(sendbuf),,(struct sockaddr*)&client_addr,size))!=strlen(sendbuf))//发送数据
  81. {
  82. fprintf(stderr,"Sendto error %s\n",strerror(errno));
  83. exit(-);
  84. }
  85.  
  86. // }
  87.  
  88. /*close server fd*/
  89. closesocket(sockfd);//终止通信并释放套接字
  90. WSACleanup();
  91.  
  92. cout<<"exit"<<endl;
  93.  
  94. return ;
  95. }

参考:

基于Linux平台实现的流式套接字客户端服务器端代码

基于linux或windows平台上的c/s简单通信的更多相关文章

  1. Windows平台上Caffe的训练与学习方法(以数据库CIFAR-10为例)

    Windows平台上Caffe的训练与学习方法(以数据库CIFAR-10为例) 在完成winodws平台上的caffe环境的搭建之后,亟待掌握的就是如何在caffe中进行训练与学习,下面将进行简单的介 ...

  2. 基于linux或windows的c/s的循环服务器求一元二次方程的根

    在linux和windows上实现 c/s模式 socket循环服务器求解一元二次方程的根 ax^2+bx+c=0 根据上式,客户端发送a,b,c给服务器,返回求解的根 暂未考虑非法数据等问题 lin ...

  3. nginx 在windows平台上对asp.net做反向代理

    代理服务器 当客户机向站点提出请求时,请求将转到代理服务器.然后,代理服务器通过防火墙中的特定通路,将客户机的请求发送到内容服务器.内容服务器再通过该通道将结果回传给代理服务器.代理服务器将检索到的信 ...

  4. windows平台上MongoDB安装配置

    我按照原文方法操作,无法连接mongod服务,可能哪里出了问题. 以下是小页的教程:https://www.cnblogs.com/littlepage/p/10992336.html  视频参考: ...

  5. Windows平台上C++开发内存泄漏检查方法

    充分的利用调试工具可以非常方便地避免内存泄漏问题. 这里介绍两种方法,互为补充,第一种是VC编译器提供的方法,第二种是专用的内存泄漏检查工具Memmory Validator.这两种方法的基本原理是一 ...

  6. windows平台上用python 远程线程注入,执行shellcode

    // 转自: https://blog.csdn.net/Jailman/article/details/77573990import sys import psutil import ctypes ...

  7. Windows平台上的pip安装

    写在前面 pip 是 Python 的包管理工具,在 Python 开发中必不可少.作为一名python菜鸟,本文在踩坑无数的基础上尽可能详细地解释pip的安装过程.在安装之前需要明确两点: 1.pi ...

  8. windows平台下 c/c++进行http通信的教训

    由于需要使用c++开发一个桌面应用软件,需要用到http请求进行通讯,也是本人第一次进行网络相关的开发工作,遇到了不少坑. 由于是在windows下开发和使用的应用软件,自然而然想到了调用Window ...

  9. 基于node的tcp客户端和服务端的简单通信

    1.简单介绍下TCP/IP TCP/IP是互联网相关协议的集合,分为以下四层:应用层.传输层.网络层.数据链路层. 分成四层的好处是,假如只有一层,某个地方需要改变设计时,就必须把所有整体替换掉,而分 ...

随机推荐

  1. Spring框架——基于XML/注解开发

    IoC的实现方式有两种:XML配置文件.基于注解. MVC开发模式: Controller层 Service层 Repository层 Controller层调用Service,Service调用Re ...

  2. Web_XML

    第1章 XML简介 “当 XML(扩展标记语言)于 1998 年 2 月被引入软件工业界时,它给整个行业带来了一场风暴.有史以来第一次,这个世界拥有了一种用来结构化文档和数据的通用且适应性强的格式,它 ...

  3. 一些Nmap NSE脚本推荐

    前言 Nmap是一款强大的开源扫描工具.同时Nmap提供了强大的脚本引擎(Nmap Scripting Engine),支持通过Lua脚本语言来扩展Nmap的功能,在Nmap的发行版中已经包含了数百个 ...

  4. Scapy编写UDP扫描脚本

    脚本内容如下: from scapy.all import * import optparse import threading def scan(target,port): pkt=IP(dst=t ...

  5. xmake v2.3.2 发布, 带来和ninja一样快的构建速度

    这个版本重点重构优化了下内部并行构建机制,实现多个target间源文件的并行编译,以及并行link的支持,同时优化了xmake的一些内部损耗,修复影响编译速度的一些bug. 通过测试对比,目前的整体构 ...

  6. 关于虚拟机NAT连接外网!!!

    点开Virtual Network Editor(开始->VMware),选择vmnet8, NAT setting就可以知道了. 1.  虚拟机NAT和主机的通讯方式,是通过虚拟网关(即NAT ...

  7. OpenCV-Python | 图像的基本操作 十

    目标 学会: 访问像素值并修改它们 访问图像属性 设置感兴趣区域(ROI) 分割和合并图像 本节中的几乎所有操作都主要与Numpy相关,而不是与OpenCV相关.要使用OpenCV编写更好的优化代码, ...

  8. CodeForces - 1249E 楼梯和电梯

    题意:第一行输入n和c,表示有n层楼,电梯来到需要时间c 输入两行数,每行n-1个,表示从一楼到二楼,二楼到三楼.....n-1楼到n楼,a[ ] 走楼梯和 b[ ] 乘电梯花费的时间 思路:动态规划 ...

  9. 83 项开源视觉 SLAM 方案够你用了吗?

    作者:吴艳敏 来源:83 项开源视觉 SLAM 方案够你用了吗? 前言 1. 本文由知乎作者小吴同学同步发布于https://zhuanlan.zhihu.com/p/115599978/并持续更新. ...

  10. Chrome 经典插件

    记录几个很喜欢的 Chrome 插件,怕之后找不到了. 1. Dark Theme 很喜欢的一个黑色主题! 2. Volume Booster 能把音量提高2倍的小插件!好用! 3. Looper f ...