zoukankan      html  css  js  c++  java
  • Client与Server

    监听套接字,通讯套接字,初始化网卡,多线程。想查自己的IP,ipconfig

    服务端

    #include "stdafx.h"
    #include <WinSock2.h>  //套接字 socket  CS--->Client Server
    #include <iostream>
    #include <Windows.h>
    using namespace std;
    
    #pragma comment(lib,"ws2_32.lib")  //动态库的静态加载
    
    DWORD WINAPI THreadFunction(LPVOID lParam);
    SOCKET ClientSocket;
    int main()
    {
        //如果要使用ws2_32.lib模块下的函数时,要初始化该模块
    
        WSADATA wsaData = {0};
        WORD wVersion = MAKEWORD(2,2); //宏,第一个2放在低8位上,第二个放在高8位上。
    
        if(WSAStartup(wVersion,&wsaData)!=0)   //一参数为WORD类型,IN,需要赋好值传进来,二参数为LP指针,OUT,需要初始化,传进来接受数据
        {
            printf("Init Socket Error
    ");
            return 0;
        }                                        //返回值为0,成功
                            //套接字相当于保安
        SOCKET ListenSocket;//监听套接字 Server socket大写为数据类型,小写为函数            (数据流)                                        (数据报)
        ListenSocket = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP); //创建监听套接字,第一参数服务于什么协议是TCP还是UDP,第二参数中SOCK_STREAM流传送适用于TCP,一个一个,SOCK_DGRAM报传送适用于UDP,一页一页的
        if(ListenSocket==INVALID_SOCKET) //创建失败,套接字不存在
        {
            WSACleanup();
            return 0;
        }
        //初始化网卡,相当于给保安建个房子
        SOCKADDR_IN  LocalAddress;
        LocalAddress.sin_family = AF_INET;                    //IP不要写死
        LocalAddress.sin_addr.S_un.S_addr = INADDR_ANY; //传IP地址的两种方式,直接强制转换为u_long型,或者像下面一样一个一个输
        LocalAddress.sin_port = htons(9627); // Host To net string  //端口连接,不能冲突(0~1024不要用,已被买断,60000多后面的端口也不要用,被QQ买断)
    
        /*
        LocalAddress.sin_addr.S_un.S.un_b.s_b1 = '192';
        LocalAddress.sin_addr.S_un.S.un_b.s_b2 = '168';
        LocalAddress.sin_addr.S_un.S.un_b.s_b3 = '1';
        LocalAddress.sin_addr.S_un.S.un_b.s_b4 = '100';
        */
    
        //绑定  让保安住到房子里      大数据小指针,解出三成员
        if(bind(ListenSocket,(sockaddr*)&LocalAddress,sizeof(SOCKADDR_IN))==SOCKET_ERROR)
        {
            closesocket(ListenSocket); //套接字存在,关闭套接字回收资源
            WSACleanup();
            return 0;
        }
    
        //监听
        listen(ListenSocket,3); //队列里面有多少未决的连接
    
    
        //Block 阻塞函数,信号不到达,得不到返回  TCP 上线请求
        SOCKADDR_IN RemoteAddress;               //客户端的IP地址
        int iRemoteAddressLen = sizeof(SOCKADDR_IN);
        ClientSocket = accept(ListenSocket,(sockaddr*)&RemoteAddress,&iRemoteAddressLen); //返回值为套接字
    
        //启动一个线程
        CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)THreadFunction,NULL,0,NULL);
    
        while(true)
        {
            char szBufferData[0x1000] = {0};
            scanf("%s",szBufferData);
    
            send(ClientSocket,szBufferData,strlen(szBufferData),0);
        }
        WSACleanup(); //库的回收
        return 0;
    }
    
    DWORD WINAPI THreadFunction(LPVOID lParam)
    {
        while(true)
        {
            char szBufferData[0x1000] = {0};
            int iReturn = recv(ClientSocket,szBufferData,0x1000,0);
            szBufferData[iReturn] = '';
            printf("%s
    ",szBufferData);
        }
    }


    客户端

    #include "stdafx.h"
    #include <WinSock2.h>  //套接字 socket 
    #include <iostream>
    #include <Windows.h>
    using namespace std;
    
    #pragma comment(lib,"ws2_32.lib")  //动态库的静态加载
    
    DWORD WINAPI THreadFunction(LPVOID lParam);
    SOCKET ClientSocket;//通讯套接字 Client 
    int main()
    {
        //如果要使用ws2_32.lib模块下的函数时,要初始化该模块
    
        WSADATA wsaData = {0};
        WORD wVersion = MAKEWORD(2,2); 
    
        if(WSAStartup(wVersion,&wsaData)!=0)  
        {
            printf("Init Socket Error
    ");
            return 0;
        }                                        
                                                                   
        ClientSocket = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
        if(ClientSocket==INVALID_SOCKET)  //创建通讯套接字
        {
            WSACleanup();
            return 0;
        }
        //初始化网卡
        SOCKADDR_IN  ServerAddress;
        ServerAddress.sin_family = AF_INET;
        ServerAddress.sin_addr.S_un.S_addr = inet_addr("192.168.0.102");    
        ServerAddress.sin_port = htons(9627);
    
        
        connect(ClientSocket,(sockaddr*)&ServerAddress,sizeof(SOCKADDR_IN)); //返回值为int
    
        CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)THreadFunction,NULL,0,NULL);
    
        while(true)
        {
            char szBufferData[0x1000] = {0};
            int iReturn = recv(ClientSocket,szBufferData,0x1000,0);
            szBufferData[iReturn] = '';
            printf("%s
    ",szBufferData);
        }
        WSACleanup(); //库的回收
        return 0;
    }
    
    
    DWORD WINAPI THreadFunction(LPVOID lParam)
    {
        while(true)
        {
            char szBufferData[0x1000] = {0};
            scanf("%s",szBufferData);
    
            send(ClientSocket,szBufferData,strlen(szBufferData),0);
        }
    }
    
    
    

     








  • 相关阅读:
    Android使用文件存储数据
    Android Sudoku第一版
    Android Preference
    Android Sudoku应用挂掉的问题
    Android刷新Dialog
    Android应用增加计时器
    使用Jquery的Ajax实现无刷新更新,修改,删除页面
    鼠标划过用户名时在鼠标右下角显示div展示用户资料
    网页宽高自适应大小
    学会读JQuery等JS插件源码
  • 原文地址:https://www.cnblogs.com/littlepear/p/5690714.html
Copyright © 2011-2022 走看看