• 0922hw


    1. #include
    2. #include
    3. #include
    4. int main(int argc, char const *argv[])
    5. {
    6. // 创建流式套接字
    7. int cfd = socket(AF_INET, SOCK_STREAM, 0);
    8. if (0 == cfd)
    9. {
    10. perror("socket");
    11. printf("__%d__\n", __LINE__);
    12. return -1;
    13. }
    14. // 允许端口快速复用
    15. int reuse = 1;
    16. if (setsockopt(cfd, SOL_SOCKET, SO_REUSEADDR, &reuse, sizeof(reuse)) < 0)
    17. {
    18. perror("setsockopt");
    19. printf("__%d__", __LINE__);
    20. return -1;
    21. }
    22. printf("允许端口快速复用成功\n");
    23. // 绑定服务器的地址信息//非必要
    24. struct sockaddr_in sin;
    25. sin.sin_family = AF_INET; // 必须填AF_INET
    26. sin.sin_port = htons(7777); // 服务器绑定的端口
    27. sin.sin_addr.s_addr = inet_addr("192.168.125.17"); // 服务器绑定的IP
    28. // 连接服务器需要填服务器的地址信息
    29. if (connect(cfd, (struct sockaddr *)&sin, sizeof(sin)) < 0)
    30. {
    31. perror("connect");
    32. printf("__%d__", __LINE__);
    33. return -1;
    34. }
    35. char buf[128] = "";
    36. int res = 0;
    37. ssize_t s_res = -1;
    38. // 创建读集合
    39. fd_set readfds, writepfds;
    40. // 清空集合
    41. FD_ZERO(&readfds);
    42. // 添加文件描述符到集合中
    43. FD_SET(0, &readfds);
    44. FD_SET(cfd, &readfds);
    45. FD_SET(cfd, &writepfds);
    46. int maxfd = cfd;
    47. while (1)
    48. {
    49. // 调用IO多路复用函数,阻塞检测集合
    50. s_res = select(maxfd + 2, &readfds, &writepfds, NULL, NULL);
    51. if (s_res < 0)
    52. {
    53. perror("select");
    54. return -1;
    55. }
    56. else if (0 == s_res)
    57. {
    58. puts("time out....");
    59. break;
    60. }
    61. if (FD_ISSET(cfd, &writepfds) == 0)
    62. continue;
    63. else
    64. {
    65. // 发送数据
    66. char buf[128] = "";
    67. fgets(buf, sizeof(buf), stdin);
    68. buf[strlen(buf) - 1] = 0;
    69. send(cfd, buf, sizeof(buf), 0);
    70. if (strcmp(buf, "quit") == 0)
    71. break;
    72. printf("发送成功\n");
    73. // 接收数据
    74. bzero(buf, sizeof(buf));
    75. res = recv(cfd, buf, sizeof(buf), 0);
    76. printf("[%s : %d] newsfd=%d , %s , __%d__\n", inet_ntoa(sin.sin_addr), ntohs(sin.sin_port), cfd, buf, __LINE__);
    77. }
    78. }
    79. // 关闭套接字
    80. close(cfd);
    81. retern 0;
    82. ]

  • 相关阅读:
    MySQL-DML语言-数据库操作语言-
    Kubernetes - Kubernetes详解;安装部署(一)
    php 教学资源管理系统mysql
    【网络服务&数据库教程】05 Web服务器 - Apache
    【简答题】月薪4k和月薪8k的区别就在这里
    才智杂志才智杂志社才智编辑部2022年第35期目录
    Web自动化测试(5)-POM
    .net MVC下鉴权认证(二)
    网络安全(黑客技术)自学笔记
    经典供货保密协议模板
  • 原文地址:https://blog.csdn.net/qiujunhang/article/details/133210615