南工程聊天室服务器源码

MyMsg.h:

[html]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. #pragma once  
  2. /************************************************************  
  3. *  文件名:MyMsg.h  
  4. *  描述:  服务器和客户端共用的头文件,消息定义  
  5. *************************************************************/  
  6. #ifndef _MYMSG_H_  
  7. #define _MYMSG_H_  
  8.   
  9. enum {  
  10.     LOGIN_MSG,           //登录  
  11.     LOGIN_MSG_RES,       //登录响应  
  12.     QUERY_FQQ,           //查询单个好友QQ  
  13.     QUERY_FQQ_RES,       //查询单个好友QQ的响应  
  14.     TALK_MSG,             //聊天  
  15.     REQUEST_ALL_FRD,      //请求所有qq好友信息  
  16.     APPLY_ALL_FRD        //应答所有qq好友信息  
  17. };  
  18.   
  19. struct LoginMsg {  
  20.     unsigned char id;  //消息编号  
  21.     char qq[6];        //登录ID号  
  22. };  
  23.   
  24. struct LoginMsgResponse {  
  25.     unsigned char id;  //消息编号  
  26.     unsigned char isOK;  
  27.     char reason[100];    //如果失败,则在此写入失败原因  
  28. };  
  29.   
  30. struct FriendQqMsg {  
  31.     unsigned char id;  //消息编号  
  32.     char qq[6];  
  33. };  
  34.   
  35. struct FriendQqMsgResponse {  
  36.     unsigned char id;  //消息编号  
  37.     unsigned char isOK;  
  38. };  
  39.   
  40. struct TalkMsg {  
  41.     unsigned char id;  //消息编号  
  42.     char qq[6];  
  43.     char fqq[6];  
  44.     char info[200];  
  45. };  
  46.   
  47. struct RequestAllFriend {  
  48.     unsigned char id;   //消息编号  
  49. };  
  50.   
  51. struct AllFriendMsg {  
  52.     unsigned char id;  //消息编号  
  53.     char qq[6];  
  54. };  
  55.   
  56. #endif  

MyTcp.cpp

[html]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. /************************************************************  
  2. *  文件名:MyTCP.cpp  
  3. *  描述:  TCP/IP通信socket封装  
  4. *************************************************************/  
  5. #include <stdio.h>  
  6. #include <WinSock2.h>  
  7. #include "MyTools.h"  
  8. #pragma comment (lib, "ws2_32.lib")  
  9.   
  10. #define PORT 5001  
  11. int ls;   //侦听套接字  
  12. int flag;//记录服务器或是客户端的标志  
  13.   
  14.          /*   描述: 初始化服务器或客户端, 该函数在使用中必需首先调用,客户端和服务器 */  
  15. int initSock(int IsServer)  
  16. {  
  17.     WSADATA data;  
  18.   
  19.     if (WSAStartup(1, &data) <0)  
  20.         printMsgExit("call WSAStartup() failure!");  
  21.   
  22.     ls = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);  
  23.     if (ls < 0)  
  24.         printMsgExit("创建套接字失败!");  
  25.   
  26.     flag = IsServer;  
  27.     if (IsServer != 0)  
  28.     {//服务器  
  29.         struct sockaddr_in servAddr;  
  30.         memset(&servAddr, 0, sizeof(servAddr));  
  31.         servAddr.sin_family = AF_INET;  
  32.         servAddr.sin_addr.s_addr = htonl(INADDR_ANY);  
  33.         servAddr.sin_port = htons(PORT);  
  34.   
  35.         if (bind(ls, (struct sockaddr *)&servAddr, sizeof(servAddr))<0) {  
  36.             printMsg("bind套接字失败!\n");  
  37.             return -1;  
  38.         }  
  39.   
  40.         if (listen(ls, 10)<0) {  
  41.             printMsg("listen套接字失败!\n");  
  42.             return -1;  
  43.         }  
  44.     }  
  45.   
  46.     return 0;  
  47. }  
  48.   
  49. /*   描述: 仅用于客户端, 连接服务器 */  
  50. int tcpConnect(const char *serverIP, unsigned short port)  
  51. {  
  52.     struct sockaddr_in servAddr;  
  53.   
  54.     memset(&servAddr, 0, sizeof(servAddr));  
  55.     servAddr.sin_family = AF_INET;  
  56.     servAddr.sin_addr.s_addr = inet_addr(serverIP);  
  57.     servAddr.sin_port = htons(port);  
  58.   
  59.     if (connect(ls, (struct sockaddr *)&servAddr, sizeof(servAddr))<0)  
  60.     {  
  61.         printMsgExit("连接服务器失败!\n");  
  62.     }  
  63.   
  64.     return ls;  
  65. }  
  66.   
  67. /* 描述: 发送数据 */  
  68. int tcpSend(unsigned int sock, const char *sendBuf, int sendBufLen)  
  69. {  
  70.     int len = send(sock, sendBuf, sendBufLen, 0);  
  71.     return len;  
  72. }  
  73.   
  74. /* 描述: 接收数据 */  
  75. int tcpRecv(unsigned int sock, char *recvBuf, int recvBufLen)  
  76. {  
  77.     int len = recv(sock, recvBuf, recvBufLen, 0);  
  78.     return len;  
  79. }  
  80.   
  81. void tcpClose(unsigned int sock)  
  82. {  
  83.     closesocket(sock);  
  84.     WSACleanup();  
  85. }  


MyTcp.h

[html]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. #pragma once  
  2. /************************************************************  
  3. *  文件名:MyTCP.h  
  4. *  描述:  TCP通信头文件  
  5. *************************************************************/  
  6. #ifndef _MYTCP_H_  
  7. #define _MYTCP_H_  
  8.   
  9. int initSock(int IsServer);  
  10. int tcpConnect(const char *serverIP, unsigned short port);  
  11. int tcpAccept();  
  12. int tcpSend(unsigned int sock, const char *sendBuf, int sendBufLen);  
  13. int tcpRecv(unsigned int sock, char *recvBuf, int recvBufLen);  
  14. void tcpClose(unsigned int sock);  
  15.   
  16. #endif   

MyTools.cpp

[html]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. /************************************************************  
  2. *  文件名:MyTools.cpp  
  3. *  描述:  共用的文件,工具函数定义  
  4. *************************************************************/  
  5. #include <stdio.h>  
  6. #include <stdlib.h>  
  7. #include "MyTools.h"  
  8.   
  9. extern int flag;  
  10.   
  11. void printMsg(const char * msg) {  
  12.     if (flag)  
  13.         printf("\t【南工服务器豪华版】%s", msg);  
  14.     else  
  15.         printf("\t【南工客户端豪华版】%s", msg);  
  16. }  
  17.   
  18. void printInt(int value) {  
  19.     if (flag)  
  20.         printf("\t【南工服务器豪华版】%d", value);  
  21.     else  
  22.         printf("\t【南工客户端豪华版】%d", value);  
  23. }  
  24.   
  25. void printMsgExit(const char * msg) {  
  26.     printMsg(msg);  
  27.     exit(0);  
  28. }  
  29.   
  30. void printIntExit(int value) {  
  31.     printInt(value);  
  32.     exit(0);  
  33. }  

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值