当前位置:   article > 正文

TCP/IP网络编程,一个简单的TCP server_registertcpserver connecttotcpserver

registertcpserver connecttotcpserver

用TCP协议编写一个简单的服务器,客户端,服务器一直监听本机的6666端口。

server.cpp代码

  1. #include <errno.h>
  2. #include <netinet/in.h>
  3. #include <stdio.h>
  4. #include <stdlib.h>
  5. #include <string.h>
  6. #include <sys/socket.h>
  7. #include <sys/types.h>
  8. #include <unistd.h>
  9. constexpr int MAXLNE = 4096;
  10. int main(int argc, char **argv)
  11. {
  12. int listenfd, connfd, n;
  13. struct sockaddr_in servaddr;
  14. char buff[MAXLNE];
  15. if ((listenfd = socket(AF_INET, SOCK_STREAM, 0)) == -1) {
  16. printf("create socket error: %s(errno: %d)\n", strerror(errno), errno);
  17. return 0;
  18. }
  19. memset(&servaddr, 0, sizeof(servaddr));
  20. servaddr.sin_family = AF_INET;
  21. servaddr.sin_addr.s_addr = htonl(INADDR_ANY);
  22. servaddr.sin_port = htons(6666);
  23. if (bind(listenfd, (struct sockaddr *)&servaddr, sizeof(servaddr)) == -1) {
  24. printf("bind socket error: %s(errno: %d)\n", strerror(errno), errno);
  25. return 0;
  26. }
  27. if (listen(listenfd, 10) == -1) {
  28. printf("listen socket error: %s(errno: %d)\n", strerror(errno), errno);
  29. return 0;
  30. }
  31. printf("========waiting for client's request========\n");
  32. while (true) {
  33. if ((connfd = accept(listenfd, (struct sockaddr *)nullptr, nullptr)) == -1) {
  34. printf("accept socket error: %s(errno: %d)\n", strerror(errno), errno);
  35. continue;
  36. }
  37. n = recv(connfd, buff, MAXLNE, 0);
  38. buff[n] = '\0';
  39. printf("recv msg from client: %s\n", buff);
  40. close(connfd);
  41. }
  42. close(listenfd);
  43. return 0;
  44. }

 

client.cpp代码

  1. #include <arpa/inet.h>
  2. #include <errno.h>
  3. #include <netinet/in.h>
  4. #include <stdio.h>
  5. #include <stdlib.h>
  6. #include <string.h>
  7. #include <sys/socket.h>
  8. #include <sys/types.h>
  9. #include <unistd.h>
  10. constexpr int MAXLNE = 4096;
  11. int main(int argc, char **argv)
  12. {
  13. int sockfd, n;
  14. struct sockaddr_in servaddr;
  15. char sendline[MAXLNE], recvline[MAXLNE];
  16. if (argc != 2) {
  17. printf("usage: ./client <ipaddress>\n");
  18. return 0;
  19. }
  20. if ((sockfd = socket(AF_INET, SOCK_STREAM, 0)) < 0) {
  21. printf("create socket error: %s(errno: %d)\n", strerror(errno), errno);
  22. return 0;
  23. }
  24. memset(&servaddr, 0, sizeof(servaddr));
  25. servaddr.sin_family = AF_INET;
  26. servaddr.sin_port = htons(6666);
  27. if (inet_pton(AF_INET, argv[1], &servaddr.sin_addr) <= 0) {
  28. printf("inet_pton error for %s\n", argv[1]);
  29. return 0;
  30. }
  31. if (connect(sockfd, (struct sockaddr *)&servaddr, sizeof(servaddr)) < 0) {
  32. printf("connect error: %s(errno: %d)\n", strerror(errno), errno);
  33. return 0;
  34. }
  35. printf("send msg to server: \n");
  36. fgets(sendline, MAXLNE, stdin);
  37. if (send(sockfd, sendline, strlen(sendline), 0) < 0) {
  38. printf("send msg error: %s(errno: %d)\n", strerror(errno), errno);
  39. return 0;
  40. }
  41. close(sockfd);
  42. return 0;
  43. }

makefile代码

  1. all:server client
  2. server:server.o
  3. g++ -g -o server server.o
  4. client:client.o
  5. g++ -g -o client client.o
  6. server.o:server.cpp
  7. g++ -g -c server.cpp
  8. clinet.o:client.cpp
  9. g++ -g -c client.cpp
  10. clean:all
  11. rm all

执行make命令,打开两个终端一个执行./server一个执行./client 127.0.0.1

当前代码只实现了单客户端连接服务端,如何实现一个简单的并发服务器呢?请看一个简单的并发tcp server

 

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/喵喵爱编程/article/detail/886260
推荐阅读
相关标签
  

闽ICP备14008679号