• windows下socket


    源代码奉上,流程图。。。这个太简单了,你自己看看。。。。。。。
    
    //TCP
    //服务器端程序
    #include< stdio.h >
    #include< stdlib.h >
    #include< windows.h >
    #include< winsock.h >
    #include< string.h > 
    
    #pragma comment( lib, "ws2_32.lib" )
    
    #define PORT 2046
    #define BACKLOG 10
    #define TRUE 1
    
    void main( void )
    {
    int iServerSock;
    int iClientSock;
    
    char *buf = "hello, world!\n";
    
    struct sockaddr_in ServerAddr;
    struct sockaddr_in ClientAddr;
    
    int sin_size;
    
    WSADATA WSAData;
    
    if( WSAStartup( MAKEWORD( 1, 1 ), &WSAData ) )//初始化
    {
    printf( "initializationing error!\n" );
    WSACleanup( );
    exit( 0 );
    }
    
    if( ( iServerSock = socket( AF_INET, SOCK_STREAM, 0 ) ) == INVALID_SOCKET )
    {
    printf( "创建套接字失败!\n" );
    WSACleanup( );
    exit( 0 );
    }
    
    ServerAddr.sin_family = AF_INET;
    ServerAddr.sin_port = htons( PORT );//监视的端口号
    ServerAddr.sin_addr.s_addr = INADDR_ANY;//本地IP
    memset( & ( ServerAddr.sin_zero ), 0, sizeof( ServerAddr.sin_zero ) );
    
    
    if( bind( iServerSock, ( struct sockaddr * )&ServerAddr, sizeof( struct sockaddr ) ) == -1 )
    {
    printf( "bind调用失败!\n" );
    WSACleanup( );
    exit( 0 );
    }
    
    if( listen( iServerSock, BACKLOG ) == -1 )
    {
    printf( "listen调用失败!\n" );
    WSACleanup( );
    exit( 0 );
    }
    
    while( TRUE )
    {
    sin_size = sizeof( struct sockaddr_in );
    iClientSock = accept( iServerSock, ( struct sockaddr * )&ClientAddr, &sin_size );
    
    if( iClientSock == -1 )
    {
    printf( "accept调用失败!\n" );
    WSACleanup( );
    exit( 0 );
    }
    
    printf( "服务器连接到%s\n", inet_ntoa( ClientAddr.sin_addr ) );
    if( send( iClientSock, buf, strlen( buf ), 0 ) == -1 )
    {
    printf( "send调用失败!" );
    closesocket( iClientSock );
    WSACleanup( );
    exit( 0 );
    }
    }
    }
    
    
    /////客户端程序
    #include< stdio.h >
    #include< stdlib.h >
    #include< windows.h >
    #include< winsock.h >
    #include< string.h > 
    
    #pragma comment( lib, "ws2_32.lib" )
    
    #define PORT 2046
    #define BACKLOG 10
    #define TRUE 1
    #define MAXDATASIZE 100
    
    
    void main( void )
    {
    
    int iClientSock;
    char buf[ MAXDATASIZE ];
    struct sockaddr_in ServerAddr;
    int numbytes;
    // struct hostent *he;
    WSADATA WSAData;
    
    // int sin_size;
    
    /* if( ( he = gethostbyname( "liuys" ) ) == NULL )
    {
    printf( "gethostbyname调用失败!" );
    WSACleanup( );
    exit( 0 );
    }
    */
    
    
    if( WSAStartup( MAKEWORD( 1, 1 ), &WSAData ) )//初始化
    {
    printf( "initializationing error!\n" );
    WSACleanup( );
    exit( 0 );
    }
    
    if( ( iClientSock = socket( AF_INET, SOCK_STREAM, 0 ) ) == INVALID_SOCKET )
    {
    printf( "创建套接字失败!\n" );
    WSACleanup( );
    exit( 0 );
    }
    
    ServerAddr.sin_family = AF_INET;
    ServerAddr.sin_port = htons( PORT );
    // ServerAddr.sin_addr = *( ( struct in_addr * )he->h_addr );
    ServerAddr.sin_addr.s_addr = inet_addr( "192.168.2.194" );//记得换IP
    memset( &( ServerAddr.sin_zero ), 0, sizeof( ServerAddr.sin_zero ) );
    
    if( connect( iClientSock, ( struct sockaddr * ) & ServerAddr, sizeof( struct sockaddr ) ) == -1 )
    {
    printf( "connect失败!" );
    WSACleanup( );
    exit( 0 );
    }
    
    numbytes = recv( iClientSock, buf, MAXDATASIZE, 0 );
    
    if( numbytes == -1 )
    {
    printf( "recv失败!" );
    WSACleanup( );
    exit( 0 );
    }
    
    buf[ numbytes ] = '\0';
    
    printf( "Received: %s", buf );
    
    closesocket( iClientSock );
    WSACleanup( );
    }
    
    
    /////UDP
    //服务器
    #include< stdio.h >
    #include< string.h >
    #include< winsock.h >
    #include< windows.h >
    
    #pragma comment( lib, "ws2_32.lib" )
    
    #define PORT 2046
    #define BACKLOG 10
    #define TRUE 1
    #define MAXDATASIZE 1000
    
    void main( void )
    {
    int iServerSock;
    // int iClientSock;
    
    int addr_len;
    int numbytes;
    
    char buf[ MAXDATASIZE ];
    
    struct sockaddr_in ServerAddr;
    struct sockaddr_in ClientAddr;
    
    WSADATA WSAData; 
    if( WSAStartup( MAKEWORD( 1, 1 ), &WSAData ) )
    {
    printf( "initializationing error!\n" );
    WSACleanup( );
    exit( 0 );
    }
    
    iServerSock = socket( AF_INET, SOCK_DGRAM, 0 );
    if( iServerSock == INVALID_SOCKET )
    {
    printf( "创建套接字失败!\n" );
    WSACleanup( );
    exit( 0 );
    }
    
    
    ServerAddr.sin_family = AF_INET;
    ServerAddr.sin_port = htons( PORT );//监视的端口号
    ServerAddr.sin_addr.s_addr = INADDR_ANY;//本地IP
    memset( & ( ServerAddr.sin_zero ), 0, sizeof( ServerAddr.sin_zero ) );
    
    
    if( bind( iServerSock, ( struct sockaddr * )&ServerAddr, sizeof( struct sockaddr ) ) == -1 )
    {
    printf( "bind调用失败!\n" );
    WSACleanup( );
    exit( 0 );
    }
    
    
    addr_len = sizeof( struct sockaddr );
    numbytes = recvfrom( iServerSock, buf, MAXDATASIZE, 0, ( struct sockaddr * ) & ClientAddr, &addr_len );
    if( numbytes == -1 )
    {
    printf( "recvfrom调用失败!\n" );
    WSACleanup( );
    exit( 0 );
    }
    
    printf( "got packet from %s\n", inet_ntoa( ClientAddr.sin_addr ) );
    printf( "packet is %d bytes long\n", numbytes );
    buf[ numbytes ] = '\0';
    printf( "packet contains \"%s\"\n", buf );
    
    closesocket( iServerSock );
    WSACleanup( );
    
    
    }
    //客户端
    #include< stdio.h >
    #include< stdlib.h >
    #include< windows.h >
    #include< winsock.h >
    #include< string.h >
    
    #pragma comment( lib, "ws2_32.lib" )
    
    #define PORT 2046
    #define MAXDATASIZE 100
    
    
    void main( void )
    {
    
    int iClientSock;
    struct sockaddr_in ServerAddr;
    
    int numbytes;
    char buf[ MAXDATASIZE ] = { 0 };
    
    WSADATA WSAData;
    if( WSAStartup( MAKEWORD( 1, 1 ), &WSAData ) )
    {
    printf( "initializationing error!\n" );
    WSACleanup( );
    exit( 0 );
    }
    
    if( ( iClientSock = socket( AF_INET, SOCK_DGRAM, 0 ) ) == -1 )
    {
    printf( "创建套接字失败!\n" );
    WSACleanup( );
    exit( 0 );
    }
    
    ServerAddr.sin_family = AF_INET;
    ServerAddr.sin_port = htons( PORT );
    ServerAddr.sin_addr.s_addr = inet_addr( "192.168.2.194" );//记得换IP
    memset( &( ServerAddr.sin_zero ), 0, sizeof( ServerAddr.sin_zero ) );
    
    
    numbytes = sendto( iClientSock, buf, strlen( buf ), 0, ( struct sockaddr * ) & ServerAddr, sizeof( struct sockaddr ) );
    if( numbytes == -1 )
    {
    printf( "sendto调用失败!\n" );
    WSACleanup( );
    exit( 0 );
    }
    
    printf( "sent %d bytes to %s\n", numbytes, inet_ntoa( ServerAddr.sin_addr ) );
    
    closesocket( iClientSock );
    WSACleanup( );
    } 
  • 相关阅读:
    FFT加速多项式乘法C语言版(基2FFT)
    springboot2中@ConfigurationProperties装载yml文件的时候调取出现值为null的解决办法
    LeetCode27-移除元素
    dom4j在解析xml文件的时候将" "解析成空格的解决办法
    LeetCode17- 电话号码的字母组合
    LeetCode19- 删除链表的倒数第N个节点
    LeetCode14- 最长公共前缀
    LeetCode20- 有效的括号
    LeetCode21- 合并两个有序链表
    MySQL单表百万数据记录分页性能优化
  • 原文地址:https://www.cnblogs.com/moonvan/p/2174482.html
Copyright © 2020-2023  润新知