套接字编程_无连接
介绍: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"); }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律