UNIX系统下的基于TCP协议的网络通信程序
来源:互联网 发布:mac library文件夹在哪 编辑:程序博客网 时间:2024/06/05 01:55
1、包含头文件
2、NETCLASEE定义
#include <sys/socket.h>#include <netinet/in.h>#include <arpa/inet.h>#include <sys/types.h>#include <sys/ipc.h>#include <sys/stat.h>ypedef struct netmessage{ int successFlag; //是否成功 int clientSocket; //客户端套接字 int serverSocket; //服务端套接字 struct sockaddr_in clientAddr; //客户端地址 struct sockaddr_in serverAddr; //服务端地址} NETMS;typedef class netclass{ public: //服务端初始化 只需要port void NetInitS(int port); void NetAceptS(); //客户端初始化 需要ip port void NetInitC(); void NetConnectC(char ipaddress[] , int port); //网络收发 int NetSend(char *buff, int bufflen); //成功返回0,失败返回-1 int NetRecv(char *buff, int bufflen); //成功返回接收数据的长度,失败返回-1 //网络关闭 void NetClose(); protected: NETMS netms;}NETC;void NETC::NetInitS(int port){ //服务端初始化创建socket if((netms.serverSocket=socket(AF_INET, SOCK_STREAM,0))<0) { perror("tcp socket error"); netms.successFlag = 0; //套接字创建失败 } else netms.successFlag = 1; //成功 if(netms.successFlag == 1) { int reuseflag = 1; if((setsockopt(netms.serverSocket, SOL_SOCKET, SO_REUSEADDR, (char*)&reuseflag, sizeof(reuseflag)))==-1) { perror("tcp setsockopt error"); netms.successFlag = 0; } else netms.successFlag = 1; } if(netms.successFlag == 1) //复用设置成功 { bzero(&netms.serverAddr, sizeof(netms.serverAddr)); netms.serverAddr.sin_family = AF_INET; netms.serverAddr.sin_port = htons(port); netms.serverAddr.sin_addr.s_addr = INADDR_ANY; //服务端初始化绑定 if(bind(netms.serverSocket, (struct sockaddr*) &netms.serverAddr, sizeof(netms.serverAddr))==-1) { perror("tcp bind error"); netms.successFlag = 0; //绑定失败 } else netms.successFlag = 1; //绑定成功 } if(netms.successFlag == 1) //绑定成功 { if(listen(netms.serverSocket, 30)<0) { perror("tcp listen error"); netms.successFlag = 0; //监听失败 } else netms.successFlag = 1; //监听成功 }}void NETC::NetAceptS() //服务端用于初始化的程序{ socklen_t addr_len = sizeof(struct sockaddr); if((netms.clientSocket=accept(netms.serverSocket, (struct sockaddr*)&(netms.clientAddr), &addr_len))<0) { perror("tcp accept error"); netms.successFlag = 0; } else { printf("server:connection client ip is %s, client port is %d.\n", inet_ntoa(netms.clientAddr.sin_addr), ntohs(netms.clientAddr.sin_port)); netms.successFlag = 1; }}void NETC::NetInitC() //客户端初始化程序{ if((netms.clientSocket=socket(AF_INET, SOCK_STREAM, 0))<0) { perror("tcp socket error"); netms.successFlag = 0; } else netms.successFlag = 1; if(netms.successFlag == 1) { int reuseflag = 1; if(setsockopt(netms.clientSocket, SOL_SOCKET, SO_REUSEADDR, (char*)&reuseflag, sizeof(reuseflag))==-1) { perror("tcp setsockopt error"); netms.successFlag = 0; } else netms.successFlag = 1; }}void NETC::NetConnectC(char ipaddress[], int port){ netms.serverAddr.sin_family=AF_INET; netms.serverAddr.sin_port = htons(port); netms.serverAddr.sin_addr.s_addr=inet_addr(ipaddress); if(connect(netms.clientSocket, (struct sockaddr*)&netms.serverAddr, sizeof(struct sockaddr))<0) { perror("tcp connect error"); netms.successFlag = 0; } else { printf("client:connection from server ip is %s, server port is %d.\n", inet_ntoa(netms.serverAddr.sin_addr), ntohs(netms.serverAddr.sin_port)); netms.successFlag = 1; }}int NETC::NetSend(char *buff, int bufflen)//成功返回发送数据的长度,否则返回-1{ return send(netms.clientSocket, buff, bufflen, 0);}int NETC::NetRecv(char *buff, int bufflen)//成功返回发送数据的长度,否则返回-1{ return recv(netms.clientSocket, buff , bufflen, 0);}void NETC::NetClose(){ close(netms.clientSocket); close(netms.serverSocket); netms.clientSocket = 0; netms.serverSocket = 0; netms.successFlag = 0;}
阅读全文
0 0
- UNIX系统下的基于TCP协议的网络通信程序
- Unix系统下的基于TCP通信的聊天室
- WSAEventSelect模型基于TCP协议的控制台网络通信程序
- 基于TCP协议的网络通信
- Android 基于TCP协议的网络通信
- 基于TCP协议的网络程序
- 基于TCP协议的网络程序
- 基于TCP协议的网络程序
- 基于TCP协议的网络程序
- 基于TCP协议的网络程序
- 基于TCP协议的网络程序
- 基于Linux系统的TCP协议的即时通信系统
- 最浓缩的基于TCP协议的网络通信详解
- 安卓学习_基于TCP协议的网络通信
- 基于TCP协议的网络通信(socket编程)
- Android中基于TCP协议的网络通信
- Windows 网络编程基于TCP协议的Socket通信
- Java基于TCP/IP协议的Socket网络通信详解
- python实现线程池
- ImageLoader的省流量模式
- php实现图片缩放,超详细注释
- C++ vector 小记
- java手动生成验证码
- UNIX系统下的基于TCP协议的网络通信程序
- Ubuntu PetaLinux安装教程
- 前端性能优化
- 框架、模式基础概念 和 常见的java框架、MVC
- vue-router如何在返回时返回到上次滚动位置 方法集锦
- HDU Wolf and Rabbit
- 选择排序
- viewpager嵌套gradview,点击无响应
- SQL注入分类