mychat.h 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121
  1. #ifndef _MYCHAT_H
  2. #define _MYCHAT_H
  3. #include "debug.h"
  4. #include "dlist.h"
  5. #include <stdio.h>
  6. #include <stdlib.h>
  7. #include <string.h>
  8. #include <strings.h>
  9. #include <fcntl.h>
  10. #include <unistd.h>
  11. #include <signal.h>
  12. #include <pthread.h>
  13. #include <errno.h>
  14. #include <sys/types.h>
  15. #include <sys/socket.h>
  16. #include <netinet/in.h>
  17. #include <arpa/inet.h>
  18. #define BLACKLOG 5
  19. #define UDP_MAXSIZE 512
  20. #define TCP_MAXSIZE 5*1024
  21. /*UDP收到客户端的消息*/
  22. struct msg_udp
  23. {
  24. int type_udp; //类型
  25. char self_name[20]; //自己的名字
  26. char aim_name[20]; //目标名字
  27. unsigned int data_size; //数据大小0 ~ 65535
  28. char data[UDP_MAXSIZE+1]; //数据
  29. struct sockaddr_in self_addr_udp; //自己udp地址
  30. struct sockaddr_in self_addr_tcp; //自己tcp地址
  31. struct sockaddr_in aim_addr_udp; //目标地址
  32. };
  33. /*添加尾部的结构体*/
  34. struct servmsg_udp
  35. {
  36. struct msg_udp recvmsg; //UDP信息
  37. struct list_head servmsg_udp_list;
  38. };
  39. /*UDP消息类型*/
  40. enum msg_udp_type
  41. {
  42. LOG_IN = 1, //登录 --1
  43. REFRESH, //要求刷新用户在线用户(重新打印在线用户) --2
  44. CHAT_ONE, //私聊消息 --3
  45. CHAT_ALL, //群聊消息 --4
  46. DOWNLOAD, //从服务器下载文件(下载之前先打印文件列表) --5
  47. UPLOAD, //上传文件到服务器 --6
  48. OFFLINE, //下线通知 --7
  49. OVER, //服务器发送本次消息结束 --8
  50. ERROR, //重复登录 --9
  51. FILE_NAME, //发送文件列表 --10
  52. FILE_ERROR, //选择文件名失败 --11
  53. NO_HANDLE //不做处理 --12
  54. };
  55. /*服务器接收消息后,创建的在线用户列表*/
  56. struct user_info
  57. {
  58. char user_name[20]; //用户名字
  59. int id; //id //是否在线
  60. struct sockaddr_in cli_addr_udp; //客户端udp地址
  61. struct sockaddr_in cli_addr_tcp; //客户端tcp地址
  62. struct list_head user_info_list;
  63. };
  64. /*********************TCP结构体******************************/
  65. /*TCP收到客户端的消息*/
  66. struct msg_tcp
  67. {
  68. int type_tcp; //类型
  69. char self_name[20]; //自己的名字
  70. char aim_name[20]; //目标名字
  71. unsigned int data_size; //数据大小0 ~ 65535
  72. unsigned int alto_size; //总大小0 ~ 65535
  73. unsigned int data_sequence; //数据顺序
  74. char data[TCP_MAXSIZE+1]; //数据
  75. struct sockaddr_in self_addr_tcp; //自己tcp地址
  76. struct sockaddr_in aim_addr_tcp; //目标地址
  77. };
  78. /*添加尾部的结构体*/
  79. struct servmsg_tcp
  80. {
  81. struct msg_tcp recvmsg; //TCP信息
  82. struct list_head servmsg_tcp_list;
  83. };
  84. /*TCP消息类型*/
  85. enum msg_tcp_type
  86. {
  87. DOWN_IF = 20, //下载询问
  88. DOWN_YES, //允许下载
  89. DOWN_NO, //拒绝下载
  90. DOWN_START, //开始下载
  91. DOWN_READY, //开始下载
  92. DOWN_LOADING, //正在下载
  93. DOWN_END, //下载结束
  94. UP_YES, //允许上传
  95. UP_NO //拒绝上传
  96. };
  97. struct down_info
  98. {
  99. char user_name[20]; //用户名字
  100. int file_wrfd; //文件fd
  101. struct sockaddr_in cli_addr_tcp; //客户端tcp地址
  102. struct list_head down_info_list;
  103. };
  104. #endif