zoukankan      html  css  js  c++  java
  • 基于TCP的通信 客户端

    #include <WINSOCK2.H>  
    
    #include <stdio.h>
    // socket   套接字
    
    
    
    #pragma comment (lib,"Ws2_32")   //library 
    
    
    DWORD WINAPI ThreadInput(LPVOID lpParam);
    DWORD WINAPI ThreadOutput(LPVOID lpParam);
    
    
    
    
    SOCKET  sClient;
    
    void main()
    {
        //first    初始化DLL
        WSADATA wsadata;
        if (WSAStartup(MAKEWORD(2,2),&wsadata)!=0)
        {
            printf("Init Error
    ");
            
            
            return ;
        }
        
        
        //second  创建套接字
        
    
        
        sClient = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP); 
    
    
    
        if (sClient == INVALID_SOCKET)
        {
            printf("Create Listen Is Error
    ");
            
            
            return;
        }
    
    
        sockaddr_in  LocalAddr;
        
        LocalAddr.sin_family = AF_INET;
        
        
        LocalAddr.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");   //127.0.0.1
        
        
        LocalAddr.sin_port = htons(8888);
    
    
        if (connect(sClient,(sockaddr*)&LocalAddr,sizeof(LocalAddr))==SOCKET_ERROR)
        {
    
    
        //    WSAENETDOWN
            int a = GetLastError();
            closesocket(sClient);
            
            
            printf("Connect Is Error
    ");
            
            
            return;        
        }
    
    
    
        HANDLE hThread[2];
        
        //这里是整个程序的核心部分我们一定要那个管道图
        
        
        hThread[0] = CreateThread(NULL,0,ThreadOutput,NULL,0,NULL);
        
        
        hThread[1] = CreateThread(NULL,0,ThreadInput,NULL,0,NULL);
        
        
        WaitForMultipleObjects(2,hThread,TRUE,INFINITE);
    
    
    }
    
    DWORD WINAPI ThreadInput(LPVOID lpParam)
    {
        SOCKET s = sClient;
    
        //该线程函数是从套接字中获取信息并且通过管道注入cmd的工作函数
    
        char Buffer[4096] = {0};
    
        DWORD dWrite = 0;
        DWORD dwRecvd = 0;
        while (TRUE)
        {
        
            scanf("%s",Buffer);
    
    
            send(s,Buffer,strlen(Buffer),0);
        }
    
    
        return 0;
    }
    
    
    DWORD WINAPI ThreadOutput(LPVOID lpParam)
    {
        
         SOCKET s = sClient;
    
        //该线程函数是从被控端返给控端信息的线程函数
    
        char Buffer[4096]={0};
        while (TRUE)
        {
        
            int Ret = recv(s,Buffer,4096,0);
    
            if(Ret<0)
            {
                break;
            }
    
            Buffer[Ret]='';
    
    
            printf("%s",Buffer);
    
        }
    
    
        return 0;
    }
    爱程序 不爱bug 爱生活 不爱黑眼圈 我和你们一样 我和你们不一样 我不是凡客 我要做geek
  • 相关阅读:
    1334: 好老师
    poj 2255 Tree Recovery
    2006浙大:简单计算器
    POJ1001(C++处理大数)
    HDU2159(二维完全背包)
    POJ2080:Calendar(计算日期)
    2008上交:Day of Week
    POJ1365:质因数分解
    VIJOS:P1706(舞会)
    POJ2449:K短路
  • 原文地址:https://www.cnblogs.com/yifi/p/4548102.html
Copyright © 2011-2022 走看看