`
alienchang
  • 浏览: 31547 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

winsock基础编程 -- server代码样例

阅读更多
#define WIN32_LEAN_AND_MEAN

#include <windows.h>
#include <winsock2.h>
#include <ws2tcpip.h>
#include <stdlib.h>
#include <stdio.h>

// Need to link with Ws2_32.lib, Mswsock.lib, and Advapi32.lib
#pragma comment (lib, "Ws2_32.lib")
#pragma comment (lib, "Mswsock.lib")
#pragma comment (lib, "AdvApi32.lib")

#define DEFAULT_BUFLEN 512
#define DEFAULT_PORT "27015"

int __cdecl main(void) 
{
    WSADATA wsaData;
    SOCKET ListenSocket = INVALID_SOCKET,
           ClientSocket = INVALID_SOCKET;
    struct addrinfo *result = NULL,
                    hints;
    char recvbuf[DEFAULT_BUFLEN];
    int iResult, iSendResult;
    int recvbuflen = DEFAULT_BUFLEN;
    

    // Initialize Winsock
    iResult = WSAStartup(MAKEWORD(2,2), &wsaData);
    if (iResult != 0) {
        printf("WSAStartup failed with error: %d/n", iResult);
        return 1;
    }

    ZeroMemory(&hints, sizeof(hints));
    hints.ai_family = AF_INET;
    hints.ai_socktype = SOCK_STREAM;
    hints.ai_protocol = IPPROTO_TCP;
    hints.ai_flags = AI_PASSIVE;

    // Resolve the server address and port
    iResult = getaddrinfo(NULL, DEFAULT_PORT, &hints, &result);
    if ( iResult != 0 ) {
        printf("getaddrinfo failed with error: %d/n", iResult);
        WSACleanup();
        return 1;
    }

    // Create a SOCKET for connecting to server
    ListenSocket = socket(result->ai_family, result->ai_socktype, result->ai_protocol);
    if (ListenSocket == INVALID_SOCKET) {
        printf("socket failed with error: %ld/n", WSAGetLastError());
        freeaddrinfo(result);
        WSACleanup();
        return 1;
    }

    // Setup the TCP listening socket
    iResult = bind( ListenSocket, result->ai_addr, (int)result->ai_addrlen);
    if (iResult == SOCKET_ERROR) {
        printf("bind failed with error: %d/n", WSAGetLastError());
        closesocket(ListenSocket);
        WSACleanup();
        return 1;
    }

    freeaddrinfo(result);

    iResult = listen(ListenSocket, SOMAXCONN);
    if (iResult == SOCKET_ERROR) {
        printf("listen failed with error: %d/n", WSAGetLastError());
        closesocket(ListenSocket);
        WSACleanup();
        return 1;
    }

    // Accept a client socket
    ClientSocket = accept(ListenSocket, NULL, NULL);
    if (ClientSocket == INVALID_SOCKET) {
        printf("accept failed with error: %d/n", WSAGetLastError());
        closesocket(ListenSocket);
        WSACleanup();
        return 1;
    }

    // No longer need server socket
    closesocket(ListenSocket);

    // Receive until the peer shuts down the connection
    do {

        iResult = recv(ClientSocket, recvbuf, recvbuflen, 0);
        if (iResult > 0) {
            printf("Bytes received: %d/n", iResult);

        // Echo the buffer back to the sender
            iSendResult = send( ClientSocket, recvbuf, iResult, 0 );
            if (iSendResult == SOCKET_ERROR) {
                printf("send failed with error: %d/n", WSAGetLastError());
                closesocket(ClientSocket);
                WSACleanup();
                return 1;
            }
            printf("Bytes sent: %d/n", iSendResult);
        }
        else if (iResult == 0)
            printf("Connection closing.../n");
        else  {
            printf("recv failed with error: %d/n", WSAGetLastError());
            closesocket(ClientSocket);
            WSACleanup();
            return 1;
        }

    } while (iResult > 0);

    // shutdown the connection since we're done
    iResult = shutdown(ClientSocket, SD_SEND);
    if (iResult == SOCKET_ERROR) {
        printf("shutdown failed with error: %d/n", WSAGetLastError());
        closesocket(ClientSocket);
        WSACleanup();
        return 1;
    }

    // cleanup
    closesocket(ClientSocket);
    WSACleanup();

    return 0;
}
分享到:
评论

相关推荐

    学习网络程序设计-03-winsock编程详解-udp通信编程-v.ppt

    学习网络程序设计-03-winsock编程详解-udp通信编程-v.ppt

    Winsock-TCP-UDP-Delphi源代码

    这个源代码包“Winsock-TCP-UDP-Delphi源代码”显然包含了使用Delphi进行TCP和UDP通信的示例代码。 TCP(Transmission Control Protocol)是一种面向连接的、可靠的传输协议,它确保数据包按顺序无丢失地到达目标。...

    用Winsock穿透各种代理-精品源代码 用Winsock穿透各种代理-精品源代码

    用Winsock穿透各种代理-精品源代码 用Winsock穿透各种代理-精品源代码

    Winsock网络编程.pdf

    - **错误处理**:Winsock提供了一套完整的错误处理机制,通过检查返回值和错误代码可以诊断网络编程中的问题。 #### 八、Winsock案例分析 - **案例一:简单聊天程序**:使用Winsock开发一个简单的客户端和服务端...

    TCP/IP Winsock编程要点---利用Winsock编程由同步和异步方式,同步方式逻辑清晰,编程专注于应用,在抢先式的多任务操作系统中(WinNt、Win2K)采用多线程方式效率基本达到异步方式的水平

    在TCP/IP Winsock编程中,同步和异步方式是两种主要的编程模型,它们各自有其特点和适用场景。同步方式通常逻辑结构清晰,程序员更专注于应用层面的处理,而在像Windows NT和Windows 2000这样的抢先式多任务操作系统...

    VisualC 实效编程 100 网络聊天:WINSOCK-TCP

    VisualC 实效编程 100 网络聊天:WINSOCK-TCPVisualC 实效编程 100 网络聊天:WINSOCK-TCPVisualC 实效编程 100 网络聊天:WINSOCK-TCPVisualC 实效编程 100 网络聊天:WINSOCK-TCPVisualC 实效编程 100 网络聊天:...

    VisualC 实效编程 101 广播信息:WINSOCK-UDP

    VisualC 实效编程 101 广播信息:WINSOCK-UDPVisualC 实效编程 101 广播信息:WINSOCK-UDPVisualC 实效编程 101 广播信息:WINSOCK-UDPVisualC 实效编程 101 广播信息:WINSOCK-UDPVisualC 实效编程 101 广播信息:...

    PB中winsock.PBL-demo

    在IT领域,尤其是在软件开发中,PowerBuilder (PB) 是一款功能强大的可视化编程工具,尤其适合构建数据库应用程序。本文将详细解析"PB中winsock.PBL-demo"这一主题,涉及如何在PowerBuilder 9.0中利用winsock控件和...

    Winsock-Client-Server-Chat.rar_网络编程_Visual_Basic_

    总结起来,"Winsock-Client-Server-Chat.rar"项目通过Visual Basic的Winsock控件展示了网络编程的基本概念和实践技巧。从客户端到服务器的连接建立,数据的收发,到多线程处理和错误处理,都是构建此类应用程序的...

    winsock相关编程源代码

    这个压缩包文件包含了与Winsock相关的编程源代码,非常适合学习和理解网络编程的基础和高级概念。 1. **Winsock基础** - **初始化**:在使用Winsock进行编程时,首先需要调用`WSAStartup`函数来初始化Winsock库。 ...

    [免费]WinSock网络编程经络经典源代码.rar

    《WinSock网络编程经络》的源码,用WinSock作为开发工具,以典型应用和标准协议为示例,介绍如何进行各种网络应用程序的设计,不仅实现客户端,也实现了服务器。用尽量简洁的代码揭示这些应用程序的本质,对WinSock...

    商业编程-源码-WinSock Win32 API 的打包类和例子程序.zip

    在IT领域,WinSock(Windows Socket)是微软为Windows操作系统提供的网络编程接口,它遵循了Berkeley Sockets接口标准,使得开发者能够在Windows环境下编写跨平台的网络应用程序。Win32 API则是Windows系统的核心...

    WinSock网络编程经络 书本源代码

    《WinSock网络编程经络》是一本专注于Windows Socket(简称Winsock)编程的书籍,旨在帮助初学者和中级学者深入理解和实践网络编程技术。Winsock是Windows操作系统中实现Berkeley Sockets接口的一个库,它是进行网络...

    WinSock TCP通信-最简单聊天例子

    在IT行业中,网络编程是不可或缺的一部分,而WinSock(Windows Socket)是Microsoft Windows下的网络通信接口,它提供了标准的Berkeley套接字API,使得开发者能够编写跨平台的TCP/IP应用程序。本示例是一个简单的...

    商业编程-源码-用于跟踪WinSock中通讯的DLL源代码.zip

    本资源“商业编程-源码-用于跟踪WinSock中通讯的DLL源代码.zip”提供了对WinSock通信进行跟踪的动态链接库(DLL)的源代码,这对于开发者来说是一个宝贵的参考资料,它可以帮助我们深入了解WinSock的工作原理,优化...

    WinSock编程基础讲义

    **WinSock编程基础** WinSock,也称为Windows Socket API,是微软为Windows操作系统提供的网络通信接口,它使得程序员能够利用TCP/IP协议栈进行网络编程。本文将深入讲解WinSock编程的基础,包括流式套接字和数据报...

    WinSock网络编程经络.pdf

    WinSock网络编程经络 随书源码 本书专门讨论Windows网络编程技术。内容包括NetBIOS和Windows重定向器方法、Winsock方法、客户端远程访问服务器方法。

    Winsock网络编程 网络编程入门好东东

    ### Winsock网络编程知识点 #### 一、Winsock网络编程简介 ...通过上述内容,我们不仅了解了WinSock的发展历程,还深入学习了WinSock的具体技术细节,这有助于开发者更好地掌握网络编程的基础知识和技术要点。

    WinSock网络编程经络-HTTP客户端程序,获取网页.pdf

    《WinSock网络编程经络-HTTP客户端程序,获取网页》这本书深入浅出地介绍了如何使用WinSock进行网络编程,特别是构建一个HTTP客户端程序来获取网页内容。以下是对书中的核心知识点的详细阐述: 1. **WinSock库**: ...

    winsock-firewall-2.0-Source

    一套完整的DELPHI防火墙开发源代码!!!! 值得学习

Global site tag (gtag.js) - Google Analytics