使用epoll和多线程实现服务器和客户端的代码
来源:互联网 发布:sql语句里日期取变量 编辑:程序博客网 时间:2024/05/17 12:52
#ifndef _CSERVER_H_#define _CSERVER_H_#include "task.h"#include "message.h"#include <iostream>#include <sys/socket.h>#include <sys/epoll.h>#include <netinet/in.h>#include <arpa/inet.h>#include <fcntl.h>#include <unistd.h>#include <stdio.h>#include <errno.h>#include <stdlib.h>#include <string.h>#include <pthread.h>#define MAX_BUF_SIZE 200#define MAX_TMP_SIZE 32class CServer{public:explicit CServer();explicit CServer(const char *server_port, const char *server_ip);bool networkInit();bool run();unsigned char *messageHandle(unsigned char *srcbuf,unsigned int srcbuf_len,unsigned int &res_len);//static void *readThread(void *args);//static void *writeThread(void *args);static void *readThread(void *args);static void *writeThread(void *args);static void *userdataHandleThread(void *args);unsigned int getIntfromBuf(unsigned char *srcBuf);void intWriteToucharBuf(int num,unsigned char *dstBuf);public:const static int HEAD_BYTE_NUMS = 4;private:void setnonblocking(int sock);private:socklen_t m_sinSize;struct sockaddr_in m_serverAddr;struct sockaddr_in m_clientAddr;int m_serverSockfd;int m_clientSockfd;int m_epfd;int m_nfds;struct epoll_event m_ev;struct epoll_event m_events[200];Task *m_readTaskHead;Task *m_readTaskTail;Task *m_writeTaskHead;Task *m_writeTaskTail;Message *m_rawMsgHead;Message *m_rawMsgTail;Message *m_handledMsgHead;Message *m_handledMsgTail;pthread_mutex_t m_readMutex;pthread_cond_t m_readCond;pthread_mutex_t m_writeMutex;pthread_cond_t m_writeCond;pthread_mutex_t m_rawMsgMutex;pthread_cond_t m_rawMsgCond;pthread_mutex_t m_handleMsgMutex;pthread_cond_t m_handleMsgCond;pthread_t m_readThread;pthread_t m_writeThread;pthread_t m_userDataHandleThread;};#endif
关于epoll 和多线程的文章很多,我自身也是在不断的检索一些文章后写下的代码,其中参考其他作者的代码 。
其中主要参考了:http://blog.csdn.net/cuiyifang/article/details/7957937 的代码,在此表示感谢!
代码里添加一些自身的东西,以适应发送不同长度的数据。
这些代码的功能:
1.客户端发送一个加法表达式
2.服务器返回结果。
weixin: 2964215702
0 0
- 使用epoll和多线程实现服务器和客户端的代码
- tcp和udp多线程的epoll服务器+客户端源代码
- tcp和udp多线程的epoll服务器+客户端源代码
- tcp和udp多线程的epoll服务器+客户端源代码
- tcp和udp多线程的epoll服务器+客户端源代码
- tcp和udp多线程的epoll服务器+客户端源代码
- tcp和udp多线程的epoll服务器+客户端源代码
- 【Java】Java多线程实现的聊天客户端和服务器
- 简易socket客户端和多线程服务器实现
- epoll服务器的介绍和实现
- 基于select和epoll的Echo服务器与客户端编程
- 【代码练习5】使用套接字实现客户端和服务器的数据传输
- epoll服务器代码实现
- 使用libevent和多线程构建高性能服务器(客户端)
- 网络编程资料总结(二)----Tcp多线程服务器和客户端的实现
- 实现客户端和服务器之间的通信(TCP协议、多线程)
- linux下用多线程实现socket服务器和客户端的异步通信
- 使用socket的Linux上的C语言helloworld多线程服务器和客户端测试程序
- MemSQL、SQLFire、Oracle XE性能对比测试
- 13暑假-14暑假周年总结
- 如何在ArcMap中创建网络分析图层
- poj-1663
- 使用 Socket 通信实现 FTP 客户端程序
- 使用epoll和多线程实现服务器和客户端的代码
- UVA 1228 Integer Transmission(dp)
- UNIX文件目录结构
- Fragment保持状态替换,以防止重复加载
- c++字符串操作函数
- Linux下查看文件和文件夹大小
- 解决CC2540 XDATA内存不足
- [1145]面向对象程序设计上机练习六(类和对象)
- PHP读取文件中文乱码UTF-8;