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
  • 相关阅读:
    Buffer lock
    union all合并记录
    欢迎您在新浪博客安家
    热点块引发的cache buffers cahins latch
    linux下能ping ip不能ping域名详解
    简易计算器页面
    学生管理系统报错(一)
    低效的SQL引发的cache buffers chains latch
    常用监控SQL
    C/C++ XMPP/Jabber 客户端类库对比/点评
  • 原文地址:https://www.cnblogs.com/yifi/p/4548102.html
Copyright © 2011-2022 走看看