socket 笔记(一)

#include "stdafx.h"
#include "WINSOCK2.H"

#pragma comment(lib,"WS2_32.lib")  
#define BUF_SIZE 64  //缓冲区大小
int _tmain(int argc, _TCHAR* argv[])
{
    WSADATA wsd;//存储WSAStartup返回的数据windows socket数据。
    SOCKET  server;   //服务器套接字
    SOCKET  client;   //客户端套接字
    int retVal;
    char buf[BUF_SIZE];

    //初始化动态库套接字
    //WSAStartup      Winsock初始化
    ZeroMemory(buf, BUF_SIZE);
    if (WSAStartup(MAKEWORD(2, 2), &wsd) != 0)
    {
        printf("WSAStartup failed 1/n");
        return 1;
    }

    //创建套接字
    //AF_INET           IPV4套接字类型
    //AF_INET6          IPV6套接字类型
    //AF_UNIX           Unix套接字类型
    //SOCK_STREAM       TCP协议
    //SOCK_DGRAM        UDP协议
    //SOCK_RAW          特殊的IPV4,可以处理ICMP、IGMP等网络报文
    //INVALID_SOCKET    socket创建失败
    server = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
    if (INVALID_SOCKET == server)
    {
        printf("socket failed !/n");
        WSACleanup();
        return -1;
    }

    //服务器套接地址
    //sin_family   协议簇
    //sin_addr     地址
    //htonl()--"Host to Network Long"
    //ntohl()--"Network to Host Long"
    //htons()--"Host to Network Short"
    //ntohs()--"Network to Host Short"
    //INADDR_ANY   inet_addr("0.0.0.0")监听所有网络
    //SOCKADDR_IN  SOCKADDR  网络地址
    SOCKADDR_IN addserver;
    addserver.sin_family = AF_INET;
    addserver.sin_port = htons(4999);
    addserver.sin_addr.S_un.S_addr = htonl(INADDR_ANY);
    
        
    //绑定套接字
    retVal = bind(server, (const struct sockaddr*)&addserver, sizeof(SOCKADDR_IN));
        if (SOCKET_ERROR == retVal)
        {
            printf("bind failed !/n");
            closesocket(server);
            WSACleanup();
            return false;
        }

    //监听套接字
    retVal = listen(server, 1);
    if (SOCKET_ERROR == retVal)
    {
        printf("listen failed!/n");
        closesocket(server);
        WSACleanup();
        return false;
    }


    //接受客户端数据
    //accept  建立链接  返回一个SOCKET类型的值,表示接收到的套接字的描述符,否则返回INVALID_SOCKET _In_ SOCKET s,
    sockaddr_in addrClient;
    int addrClintlen = sizeof(addrClient);
    client = accept(server, (sockaddr FAR*)&addrClient, &addrClintlen);
    {
        printf("accept failed !/n");
        closesocket(server);
        WSACleanup();
        return -1;
    }


    //接收客户端套接字
    retVal = recv(client, buf, BUF_SIZE, 0);
    if (SOCKET_ERROR == retVal)
    {
        printf("recv failed !/n");
        closesocket(server);
        closesocket(client);
        WSACleanup();
        return false;
    }

    //退出程序
    printf("Recv From Client:%s/n", buf);
    retVal = send(client, "Hello Word!", strlen("Hello word!"), 0);
    if (SOCKET_ERROR == retVal)
    {
        printf("send failed !/n");
        closesocket(server);
        closesocket(client);
        WSACleanup();
        return false;
    }
    closesocket(server);
    closesocket(client);
    WSACleanup();
    return 0;
}

 

posted @ 2018-04-12 22:40  ye_ming  阅读(231)  评论(0编辑  收藏  举报