TCP Echo 服务器
来源:互联网 发布:贪吃蛇算法思想 编辑:程序博客网 时间:2024/05/21 09:58
Windows版的EchoServer
#include<stdio.h>#include<winsock2.h>#include<windows.h>#pragma comment(lib,"ws2_32.lib")BOOL InitSock();//加载winsock第一个版本进行版本协商int main(){ system("color 4f"); InitSock();//加载winsock第一个版本进行版本协商 //创建套接字 SOCKET m_SrvSocket=socket(AF_INET,SOCK_STREAM,0); SOCKADDR_IN m_SrvAddr; m_SrvAddr.sin_addr .S_un .S_addr =htonl(INADDR_ANY); // m_SrvAddr.sin_addr .S_un .S_addr =inet_addr("10.0.2.10"); m_SrvAddr.sin_family =AF_INET; m_SrvAddr.sin_port =htons(5554); bind(m_SrvSocket,(SOCKADDR*)&m_SrvAddr,sizeof(SOCKADDR));//绑定端口号 if(SOCKET_ERROR==listen(m_SrvSocket,10))//监听客户端的请求 { ::MessageBox(NULL,"监听失败","failed",0); closesocket(m_SrvSocket); WSACleanup(); return 0; } SOCKADDR_IN m_ClientAddr; int len=sizeof(SOCKADDR); //char Recv[200]; //char SendBuf[200]; //SOCKET connect=accept(m_SrvSocket,(SOCKADDR*)&m_ClientAddr,&len); printf("....服务器启动.../n");// printf("%s/n",m_SrvAddr.sin_addr .S_un .S_addr); /*SOCKET connect=accept(m_SrvSocket,(SOCKADDR*)&m_ClientAddr,&len);//与客户端建立连接 if(connect== INVALID_SOCKET ) { ::MessageBox(NULL,"连接失败","ERROR",0); closesocket(m_SrvSocket); WSACleanup(); return 0; }*/ //closesocket(connect); char buffer[2048]; memset(buffer,0,sizeof(buffer)); char Buf[2048]; memset(Buf,0,sizeof(Buf)); while(1) {SOCKET connect=accept(m_SrvSocket,(SOCKADDR*)&m_ClientAddr,&len);//与客户端建立连接printf("==============recvclient========message/n"); recv(connect,buffer,2048,0); sprintf(Buf,"%s say : %s",inet_ntoa(m_ClientAddr.sin_addr),buffer); printf("%s/n",Buf); send(connect,buffer,strlen(Buf)+1,0); } //closesocket(connect); closesocket(m_SrvSocket); WSACleanup(); return 0;}BOOL InitSock(){ //加载winsock第一个版本进行版本协商 WORD wVersionRequested; WSADATA wsaData; int err; wVersionRequested = MAKEWORD( 2, 2 ); err = WSAStartup( wVersionRequested, &wsaData ); if ( err != 0 ) { /* Tell the user that we could not find a usable */ /* WinSock DLL. */ return false; } /* Confirm that the WinSock DLL supports 2.2.*/ /* Note that if the DLL supports versions greater */ /* than 2.2 in addition to 2.2, it will still return */ /* 2.2 in wVersion since that is the version we */ /* requested. */ if ( LOBYTE( wsaData.wVersion ) != 2 || HIBYTE( wsaData.wVersion ) != 2 ) { /* Tell the user that we could not find a usable */ /* WinSock DLL. */ WSACleanup( ); return false; } /* The WinSock DLL is acceptable. Proceed. */ return true;}
Linux版本的 EchoServer
#include <iostream>#include<sys/socket.h>#include<sys/select.h>#include<sys/ioctl.h>#include<sys/types.h>#include<stdint.h>#include<sys/time.h>#include<arpa/inet.h>#include<fcntl.h>#include<pthread.h>using namespace std;//const char gServerAddr[] = "127.0.0.1";const short gServerPort = 3555;const size_t gRecvBufferLength = 1024;int serverSockId;sockaddr_in serverAddr;int initSocket(){ serverSockId = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP); if(-1 == serverSockId) {//INVALID_SOCKET return -1; } serverAddr.sin_addr.s_addr = INADDR_ANY; serverAddr.sin_family =AF_INET ; serverAddr.sin_port = htons(gServerPort); if(-1==::bind(serverSockId,(sockaddr*)&serverAddr,sizeof(sockaddr))) { return -1; } if(-1==listen(serverSockId,5)) { return -1; } return 0;}void doRecvWrite(){ do { sockaddr_in clientSocket; socklen_t addrlen = 0; int clientSocketId = ::accept(serverSockId,(sockaddr*)&clientSocket,&addrlen); if(clientSocketId == -1) continue; cout<<"connecting from :"<<inet_ntoa(clientSocket.sin_addr)<<endl; while(1) { char recvData[gRecvBufferLength] = {0}; int recvLength = recv(clientSocketId, recvData,gRecvBufferLength,0); if(recvLength>0) { send(clientSocketId,recvData,gRecvBufferLength,0); } else if(recvLength ==0) { cout<<"disconnected :"<<inet_ntoa(clientSocket.sin_addr)<<endl; break; } } } while (1);}int main(int argc, const char * argv[]){ if(-1==initSocket()) { cout<<"init failed"<<endl; } else { cout<<"server running"<<endl; doRecvWrite(); } return 0;}
- TCP Echo 服务器
- select 实现 tcp echo 服务器
- windows下的TCP并发ECHO服务器
- TCP多线程并发服务器+线程池+echo
- 6.基于poll的TCP echo服务器
- Echo服务器
- echo 服务器
- TCP Echo Server(select)
- ECHO TCP Server Client
- echo - TCP/UDP 7
- TCP实现ECHO程序
- TCP echo test
- TCP echo server demo
- 基于libuv库的tcp, udp echo服务器和客户段测试python代码。
- Linux网络编程(2)简单的TCP回射服务器(Echo Server)
- <网络编程培训之三> 实现TCP/UDP的简单Echo服务器
- 使用 libev 构建 TCP 响应服务器(echo server)的简单流程
- linux echo 服务器模型
- Overview of malware inspection
- 管理-民主
- vc实现的 生成者,消费者问题
- Spring 中事务管理
- sigar获取进程信息
- TCP Echo 服务器
- android Dialog窗体监听
- 得用户者得天下
- 几款引擎比较:BigWorld,Unreal,CryEngine等
- jsp 完成文件下载
- 虚拟机问题
- 方正飞鸿FIX ES2007荣获大连软交会创新产品奖
- HDU 2013 蟠桃记
- Makefile的特殊目标