• 网络编程 day3


    1. #include
    2. #define SER_PORT 6678 //服务器端口号
    3. #define SER_IP "192.168.115.64"//服务器IP地址
    4. #define CLI_PORT 6666 //客户端端口号
    5. #define CLI_IP "192.168.115.93"
    6. int main(int argc, const char *argv[])
    7. {
    8. //1.创建套接字,用于连接使用
    9. int cfd=socket(AF_INET,SOCK_STREAM,0);
    10. if(cfd==-1)
    11. {
    12. perror("socket error");
    13. return -1;
    14. }
    15. printf("cfd=%d\n",cfd);
    16. //设置端口号快速重用
    17. int reuse=1;
    18. if(setsockopt(cfd,SOL_SOCKET,SO_REUSEADDR,&reuse,sizeof(reuse))==-1)
    19. {
    20. perror("setsockopt error");
    21. return -1;
    22. }
    23. printf("端口快速重用成功\n");
    24. //2.给套接字绑定地址信息
    25. //2.1填充地址信息结构体
    26. struct sockaddr_in sin;
    27. sin.sin_family=AF_INET; //地址族
    28. sin.sin_port=htons(CLI_PORT);//端口号网络字节序
    29. sin.sin_addr.s_addr=inet_addr(CLI_IP);//IP地址网络字节序
    30. //2.2绑定工作
    31. if(bind(cfd,(struct sockaddr*)&sin,sizeof(sin))==-1)
    32. {
    33. perror("bind error");
    34. return -1;
    35. }
    36. printf("bind success _%d_\n",__LINE__);
    37. //3.连接服务器
    38. //3.1填充要连接的服务器地址信息结构体
    39. struct sockaddr_in cin;
    40. cin.sin_family=AF_INET;//IPV4通信
    41. cin.sin_port=htons(SER_PORT);//服务器端口号
    42. cin.sin_addr.s_addr=inet_addr(SER_IP);//服务器的主机地址
    43. //3.2连接服务器
    44. if(connect(cfd,(struct sockaddr*)&cin,sizeof(cin))==-1)
    45. {
    46. perror("connect error");
    47. return -1;
    48. }
    49. printf("connect success _%d_\n",__LINE__);
    50. //4.收发数据
    51. char buf[5]={0xff,0x02,0x00,0,0xff};//用于接收要发送的
    52. char ch;//用于存储wasd
    53. while(1)
    54. {
    55. //从终端获取输入的字符'w','a','s','d'
    56. scanf("%c",&ch);
    57. switch(ch)
    58. {
    59. case 'w':
    60. {
    61. buf[3]++;
    62. buf[2]=0x00;
    63. if(buf[3]>90)
    64. {
    65. buf[3]=0;
    66. continue;
    67. }
    68. break;
    69. }
    70. case 'a':
    71. {
    72. buf[3]--;
    73. buf[2]=0x01;
    74. if(buf[3]<0)
    75. {
    76. buf[3]=90;
    77. continue;
    78. }
    79. break;
    80. }
    81. case 's':
    82. {
    83. buf[3]--;
    84. buf[2]=0x00;
    85. if(buf[3]<0)
    86. {
    87. buf[3]=90;
    88. continue;
    89. }
    90. break;
    91. }
    92. case 'd':
    93. {
    94. buf[3]++;
    95. buf[2]=0x01;
    96. if(buf[3]>180)
    97. {
    98. buf[3]=0;
    99. continue;
    100. }
    101. break;
    102. }
    103. }
    104. //发送给服务器端
    105. if(send(cfd,buf,sizeof(buf),0)==-1)
    106. {
    107. perror("send error");
    108. return -1;
    109. }
    110. }
    111. //5.关闭套接字
    112. close(cfd);
    113. return 0;
    114. }

  • 相关阅读:
    【仿牛客网笔记】 Spring Boot进阶,开发社区核心功能-事务管理
    被锁总时间
    UVM中uvm_config_db在sequence中的使用
    小红书保姆级教程 | 2023达人投放怎么做?
    聊聊公司的那点事
    3D全景虚拟样板间展销系统扩展用户市场范围
    Django系列17-员工管理系统实战--文件上传
    【常见错误】npm ERR! code CERT_HAS_EXPIRED & errno CERT_HAS_EXPIRED
    大数据培训技术Phoenix
    (十七)STM32——定时器
  • 原文地址:https://blog.csdn.net/u014137683/article/details/134022121