Winsock

Server Source Code
#include <stdio.h>
#include "winsock2.h"
void main() {
    // Initialize Winsock.
    WSADATA wsaData;
    int iResult = WSAStartup( MAKEWORD(2,2), &wsaData );
    if ( iResult != NO_ERROR )
        printf("Error at WSAStartup()/n");
    // Create a socket.
    SOCKET m_socket;
    m_socket = socket( AF_INET, SOCK_STREAM, IPPROTO_TCP );
    if ( m_socket == INVALID_SOCKET ) {
        printf( "Error at socket(): %ld/n", WSAGetLastError() );
        WSACleanup();
        return;
    }
    // Bind the socket.
    sockaddr_in service;
    service.sin_family = AF_INET;
    service.sin_addr.s_addr = inet_addr( "127.0.0.1" );
    service.sin_port = htons( 27015 );
    if ( bind( m_socket, (SOCKADDR*) &service, sizeof(service) ) == SOCKET_E
RROR ) {
        printf( "bind() failed./n" );
        closesocket(m_socket);
        return;
    }
    // Listen on the socket.
    if ( listen( m_socket, 1 ) == SOCKET_ERROR )
        printf( "Error listening on socket./n");
    // Accept connections.
    SOCKET AcceptSocket;
    printf( "Waiting for a client to connect.../n" );
    while (1) {
        AcceptSocket = SOCKET_ERROR;
        while ( AcceptSocket == SOCKET_ERROR ) {
            AcceptSocket = accept( m_socket, NULL, NULL );
        }
        printf( "Client Connected./n");
        m_socket = AcceptSocket;
        break;
    }
    // Send and receive data.
    int bytesSent;
    int bytesRecv = SOCKET_ERROR;
    char sendbuf[32] = "Server: Sending Data.";
    char recvbuf[32] = "";
    bytesRecv = recv( m_socket, recvbuf, 32, 0 );
    printf( "Bytes Recv: %ld/n", bytesRecv );
    bytesSent = send( m_socket, sendbuf, strlen(sendbuf), 0 );
    printf( "Bytes Sent: %ld/n", bytesSent );
    return;
}

 

 

Client Source Code
#include <stdio.h>
#include "winsock2.h"
void main() {
    // Initialize Winsock.
    WSADATA wsaData;
    int iResult = WSAStartup( MAKEWORD(2,2), &wsaData );
    if ( iResult != NO_ERROR )
        printf("Error at WSAStartup()/n");
    // Create a socket.
    SOCKET m_socket;
    m_socket = socket( AF_INET, SOCK_STREAM, IPPROTO_TCP );
    if ( m_socket == INVALID_SOCKET ) {
        printf( "Error at socket(): %ld/n", WSAGetLastError() );
        WSACleanup();
        return;
    }
    // Connect to a server.
    sockaddr_in clientService;
    clientService.sin_family = AF_INET;
    clientService.sin_addr.s_addr = inet_addr( "127.0.0.1" );
    clientService.sin_port = htons( 27015 );
    if ( connect( m_socket, (SOCKADDR*) &clientService, sizeof(clientService
) ) == SOCKET_ERROR) {
        printf( "Failed to connect./n" );
        WSACleanup();
        return;
    }
    // Send and receive data.
    int bytesSent;
    int bytesRecv = SOCKET_ERROR;
    char sendbuf[32] = "Client: Sending data.";
    char recvbuf[32] = "";
    bytesSent = send( m_socket, sendbuf, strlen(sendbuf), 0 );
    printf( "Bytes Sent: %ld/n", bytesSent );
    while( bytesRecv == SOCKET_ERROR ) {
        bytesRecv = recv( m_socket, recvbuf, 32, 0 );
        if ( bytesRecv == 0 || bytesRecv == WSAECONNRESET ) {
            printf( "Connection Closed./n");
            break;
        }
        if (bytesRecv < 0)
            return;
        printf( "Bytes Recv: %ld/n", bytesRecv );
    }
    return;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值