zoukankan      html  css  js  c++  java
  • windows之socket编程示例

    1. tcp服务器端

    #include "stdafx.h"
    
    #include <WINSOCK2.H>
    #include <windows.h>
    #include <iostream>
    #include <string>
    
    #pragma     comment(lib, "ws2_32.lib ") 
    
    using namespace std;
    
    
    DWORD WINAPI ClientThread(LPVOID sockCliet);
    
    int _tmain(int argc, _TCHAR* argv[])
    {
        
        // 0 --- 加载套接字库
        WSAData wsaData;
        WSAStartup(MAKEWORD(2,2), &wsaData);
    
        // 1 --- 创建套接字
        SOCKET serSock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
    
        // 2 --- 绑定套接字
        SOCKADDR_IN addrService;
        addrService.sin_family = AF_INET;
        addrService.sin_addr.s_addr = inet_addr("127.0.0.1");
        addrService.sin_port = htons(6000);
        bind(serSock, (sockaddr *)&addrService, sizeof(addrService));
        
        // 3 --- 指定最大同时连接数,开始监听
        listen(serSock, 10);
    
    
        // 4 --- 接受新的连接,创建线程处理本次连接
        while (1)
        {
            SOCKADDR_IN addrClient;
            int n = sizeof(addrClient);
            SOCKET newSock = accept(serSock, (sockaddr*)&addrClient, &n);    // newSock应该在子线程中关闭
            if (newSock != INVALID_SOCKET)
            {
                /*
                 5 --- 利用返回的套接字和客户端进行通信
                 6 --- 关闭套接字
                 这两步都在子线程中进行
                */
                HANDLE hThread = CreateThread(NULL, 0, ClientThread, (LPVOID)newSock, 0, NULL); 
                CloseHandle(hThread);    // 减小引用计数,并不会关闭线程,线程创建时,引用计数为2
            }
            else
            {
                break;
            }
        }
        
        // 7 --- 关闭套接字
        closesocket(serSock);
        
        // 8 --- 关闭加载的套接字库
        WSACleanup(); 
        return 0;
    }
    
    /****************************
        和客户端进行通信的子进程
    *****************************/
    
    DWORD WINAPI ClientThread(LPVOID sockClient) 
    {
        SOCKET  sock = (SOCKET)sockClient;
        char buffer[100] = {0};
        
        while (1)
        {
            int recvLen = recv(sock, buffer, 100, 0);
            if ( 0 == recvLen)    break;
            cout << "message from client: " << buffer << endl;
            //send(sock, "welcome.", strlen("welcome."), 0);
        }
    
        closesocket(sock);
    
        return 0;
    }

    2. tcp客户端

    #include "stdafx.h"
    
    #include <WINSOCK2.H>
    #include <windows.h>
    #include <iostream>
    #include <string>
    
    #pragma     comment(lib, "ws2_32.lib ") 
    
    using namespace std;
    
    int _tmain(int argc, _TCHAR* argv[])
    {
        // 0 --- 加载套接字库
        WSAData wsaData;
        WSAStartup(MAKEWORD(2, 2), &wsaData);
        
        // 1 --- 创建套接字
        SOCKET clientSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
    
        // 2 --- 绑定套接字
        sockaddr_in serverAddr;
        serverAddr.sin_family = AF_INET;
        serverAddr.sin_addr.s_addr = inet_addr("127.0.0.1");
        serverAddr.sin_port = htons(6000);
    
        // 3 --- 向服务器发出连接请求
        connect(clientSocket, (sockaddr*)&serverAddr, sizeof(serverAddr));
    
        // 4 --- 和服务器端进行通信(send/recv)
        while (1)
        {
            Sleep(10000);
            send(clientSocket, "welcome.", strlen("welcome."), 0);
        }
    
        // 5 --- 关闭套接字
        closesocket(clientSocket);
    
        // 6 --- 关闭加载的套接字库
        WSACleanup(); 
    
        return 0;
    }
  • 相关阅读:
    Oracle简介
    Python 新建程序
    HTML 标记 3 —— CSS
    Dreamweaver 2
    Dreamweaver 1 网页制作
    has-a关系——多重私有继承
    has-a关系——包含对象成员的类
    《使用wxWidgets进行跨平台程序开发》chap02——一个简单的应用程序
    抽象基类(ABC),纯虚函数
    普通类继承
  • 原文地址:https://www.cnblogs.com/wangzhijun/p/3770872.html
Copyright © 2011-2022 走看看