1 #include <iostream> 2 #include <cstdlib> 3 #include "server.h" 4 #include <windows.h> 5 using namespace std; 6 7 int main() 8 { 9 Object_server a; 10 Sleep(100000); 11 12 return 0; 13 } 14 15 16 17 #ifndef SERVER_H_INCLUDED 18 #define SERVER_H_INCLUDED 19 20 #include <winsock2.h> 21 #include <iostream> 22 #include <cstdlib> 23 #include <cstring> 24 #include <vector> 25 #include <process.h> 26 #include <windows.h> 27 #include <stdio.h> 28 using namespace std; 29 30 class Object_server 31 { 32 private: 33 34 bool bool_server_flag; 35 WSADATA wsaData; 36 int socket_counter; 37 struct Object_socket 38 { 39 SOCKET socket_Local; 40 SOCKET *socket_Remote; 41 }; 42 struct Object_socketaddr 43 { 44 struct sockaddr_in sockaddr_Local; 45 struct sockaddr_in *sockaddr_Remote; 46 }; 47 48 struct Object_Data_transmission 49 { 50 int int_counter; 51 int total; 52 vector <int> int_target;//-1 server -2NULL 53 vector <string> str_Data; 54 }; 55 56 Object_socket O_socket; 57 Object_socketaddr O_sockaddr; 58 Object_Data_transmission *O_Data_transmission; 59 bool server_on(int int_port=11111) 60 { 61 int int_flag; 62 63 if(WSAStartup(MAKEWORD(2,2),&wsaData)!=0) 64 { 65 return false; 66 } 67 O_socket.socket_Local=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP); 68 69 if(O_socket.socket_Local==INVALID_SOCKET) 70 { 71 return false; 72 } 73 74 O_sockaddr.sockaddr_Local.sin_family=AF_INET; 75 //O_sockaddr.sockaddr_Local.sin_addr.s_addr=inet_addr(PC_DATA.get_Ip()); 76 O_sockaddr.sockaddr_Local.sin_addr.s_addr=inet_addr("127.0.0.1"); 77 O_sockaddr.sockaddr_Local.sin_port=htons(int_port); 78 //O_sockaddr.sockaddr_Local.sin_zero=NULL; 79 80 81 82 int_flag=bind(O_socket.socket_Local,(struct sockaddr *)&O_sockaddr.sockaddr_Local,sizeof(O_sockaddr.sockaddr_Local)); 83 if(int_flag!=0) 84 { 85 return false; 86 } 87 88 int_flag=listen(O_socket.socket_Local,128); 89 if(int_flag!=0) 90 { 91 return false; 92 } 93 O_socket.socket_Remote=new SOCKET[128]; 94 O_sockaddr.sockaddr_Remote=new sockaddr_in[128]; 95 O_Data_transmission=new Object_Data_transmission[128]; 96 97 socket_counter=0; 98 99 bool_server_flag=true; 100 101 //_beginthread(Object_server::accept_thread,0,(void *)this); 102 unsigned threadID; 103 104 //int_flag=_beginthreadex(NULL,0,Object_server::accept_thread,(void *)this,CREATE_SUSPENDED,&threadID); 105 int_flag=_beginthreadex(NULL,0,Object_server::accept_thread,(void *)this,0,&threadID); 106 //cout<<int_flag; 107 //accept_thread((void *)this); 108 return true; 109 110 } 111 112 static unsigned __stdcall accept_thread(void *ptr) 113 { 114 static_cast<Object_server *>(ptr)->accept_f(); 115 return 0; 116 } 117 118 void accept_f() 119 { 120 int sockaddr_size; 121 SOCKET S_tmp; 122 while(bool_server_flag) 123 { 124 125 sockaddr_size=sizeof(O_sockaddr.sockaddr_Remote[socket_counter]); 126 O_socket.socket_Remote[socket_counter]=accept(O_socket.socket_Local,(struct sockaddr *)&O_sockaddr.sockaddr_Remote[socket_counter],&sockaddr_size); 127 128 if(O_socket.socket_Remote[socket_counter]!=INVALID_SOCKET) 129 { 130 ++socket_counter; 131 //cout<<"connect : "<<socket_counter<<' '; 132 } 133 else 134 { 135 //cout<<"connect failed"<<socket_counter<<' '; 136 } 137 } 138 } 139 140 public: 141 142 Object_server() 143 { 144 bool_server_flag=false; 145 146 while(server_on()) 147 { 148 149 } 150 } 151 152 Object_server(int int_port) 153 { 154 bool_server_flag=false; 155 156 while(server_on(int_port)) 157 { 158 159 } 160 } 161 ~Object_server() 162 { 163 delete []O_socket.socket_Remote; 164 delete []O_sockaddr.sockaddr_Remote; 165 delete []O_Data_transmission; 166 } 167 168 }; 169 170 #endif // SERVER_H_INCLUDED