套接字编程_无连接

介绍:A 作为服务器,B 作为客户端,B 键入文字发送给 A,A 收到后将暗号回复给 B 表示确认接收。

A.cpp:

复制代码
#include <stdio.h>
// Winsock是一个基于Socket模型的API
#include <winsock2.h>
#include <windows.h> 

// 要包含头文件 Winsock2.h,就需要调用库 ws2_32.lib
#pragma comment( lib, "ws2_32.lib" )



/* Winsock启动测试,检查系统协议栈安装情况 */
void TestWinsockStartup();



int main( int argc, char* argv[] ) {
    // 0. Winsock启动测试
    TestWinsockStartup();
    
    // 1. 创建服务器端通信套接字 
    SOCKET ss = socket( AF_INET, SOCK_DGRAM, 0 );
    
    struct sockaddr_in ser, cli;
    int len = sizeof(cli);
    
    // 2. 将创建的套接字与服务器地址进行绑定 
    ser.sin_family = AF_INET;
    ser.sin_port = htons( 3256 );  // 端口号
    ser.sin_addr.s_addr = htonl( INADDR_ANY );
    if( bind(ss, (LPSOCKADDR)&ser, sizeof(ser)) == SOCKET_ERROR ){
        printf("bind() Failed: %d\n", WSAGetLastError());
        return -1;
    }
    
    
    while(1) {
        // 接收信息 
        char buf[50];
        recvfrom(ss, buf, sizeof(buf), 0, (struct sockaddr*)&cli, &len);
        printf("%s", buf);
        
        // 发送信息 (暗号) 
        strcpy(buf, "hello");
        sendto(ss, buf, sizeof(buf), 0, (struct sockaddr*)&cli, len);
    }
    
    closesocket(ss);
    WSACleanup();
    return 0;
}



/* Winsock启动测试,检查系统协议栈安装情况 */
void TestWinsockStartup() {
    WORD wVersionRequested;
    WSADATA wsaData;
    wVersionRequested = MAKEWORD(2, 2);
    
    if( WSAStartup(wVersionRequested, &wsaData) != 0 ) {
        printf("Winsock初始化错误!\n");
        return ;
    }
    if( wsaData.wVersion != wVersionRequested ) {
        printf("Winsock版本不匹配!\n");
        WSACleanup();
        return ;
    }
//    printf("WinsockDLL正确加载!\n");
}
复制代码

B.cpp:

复制代码
#include <stdio.h>
// Winsock是一个基于Socket模型的API
#include <winsock2.h>
#include <windows.h> 

// 要包含头文件 Winsock2.h,就需要调用库 ws2_32.lib
#pragma comment( lib, "ws2_32.lib" )



/* Winsock启动测试,检查系统协议栈安装情况 */
void TestWinsockStartup();



int main( int argc, char* argv[] ) {
    // 0. Winsock启动测试
    TestWinsockStartup();
    
    // 1. 创建服务器端通信套接字 
    SOCKET ss = socket( AF_INET, SOCK_DGRAM, 0 );
    
    struct sockaddr_in addr;
    
    // 2. 将创建的套接字与服务器地址进行绑定 
    addr.sin_family = AF_INET;
    addr.sin_port = htons( 3256 );  // 端口号
    addr.sin_addr.s_addr = inet_addr( "127.0.0.1" );

    
    while(1) {
        // 发送信息 
        char buf[50];
        scanf("%s", buf);
        sendto(ss, buf, sizeof(buf), 0, (struct sockaddr*)&addr, sizeof(addr));
        
        // 接收信息 (暗号) 
        int len = sizeof(addr);
        recvfrom(ss, buf, sizeof(buf), 0, (struct sockaddr*)&addr, &len);
        
        // 对暗号 
        if( strcmp(buf, "hello") == 0 ) {
            printf("接收\n");
        } else {
            printf("丢失\n");
        }
    }
    
    closesocket(ss);
    WSACleanup();
    return 0;
}



/* Winsock启动测试,检查系统协议栈安装情况 */
void TestWinsockStartup() {
    WORD wVersionRequested;
    WSADATA wsaData;
    wVersionRequested = MAKEWORD(2, 2);
    
    if( WSAStartup(wVersionRequested, &wsaData) != 0 ) {
        printf("Winsock初始化错误!\n");
        return ;
    }
    if( wsaData.wVersion != wVersionRequested ) {
        printf("Winsock版本不匹配!\n");
        WSACleanup();
        return ;
    }
//    printf("WinsockDLL正确加载!\n");
}
复制代码

 

posted @   HanselHuang  阅读(63)  评论(0编辑  收藏  举报
编辑推荐:
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
点击右上角即可分享
微信分享提示