MFC学习 socket
下面未处理异常
tcpserver.cpp
#include "WinSock2.h" #include <stdio.h> #pragma comment(lib, "ws2_32.lib") #define PORT 1666 int main() { WORD wVersion = MAKEWORD(2, 2); int err; WSADATA wsaData; err = WSAStartup(wVersion, &wsaData); SOCKET sockSrv = socket(AF_INET, SOCK_STREAM, NULL); sockaddr_in addSrv; addSrv.sin_addr.S_un.S_addr = htonl(INADDR_ANY); //或用inet_addr("192.168.1.1"); addSrv.sin_family = AF_INET; addSrv.sin_port = htons(PORT); bind(sockSrv, (sockaddr FAR *)&addSrv, sizeof(addSrv)); int iResult = listen(sockSrv, SOMAXCONN);//等待连结数, 最大连接请求数 SOMAXCONN printf("server ip:%s\n", inet_ntoa(addSrv.sin_addr)); printf("server port:%d\n", ntohs(addSrv.sin_port)); printf("start listening...\n"); while(TRUE) { sockaddr_in addClient; int iLen = sizeof(addClient); SOCKET sockConn = accept(sockSrv, (sockaddr FAR *)&addClient, &iLen); printf("client ip:%s\n", inet_ntoa(addClient.sin_addr)); printf("client port:%d\n", ntohs(addClient.sin_port)); char sendBuf[100]; sprintf(sendBuf, "Welcome %s to server", inet_ntoa(addClient.sin_addr)); send(sockConn, sendBuf, strlen(sendBuf) + 1, 0); //多写一个字节, 可以多个\0 char recvBuf[100]; recv(sockConn, recvBuf, 100, 0); //tcp用recv, udp用recvfrom printf("%s\n", recvBuf); closesocket(sockConn); } closesocket(sockSrv); WSACleanup(); return 0; }
tcpclient.cpp
#include "WinSock2.h" #include <stdio.h> #pragma comment(lib, "ws2_32.lib") #define PORT 1666 int main() { WORD wVersion = MAKEWORD(2, 2); int err; WSADATA wsaData; err = WSAStartup(wVersion, &wsaData); SOCKET sockClient = socket(AF_INET, SOCK_STREAM, NULL); sockaddr_in addSrv; addSrv.sin_addr.S_un.S_addr = inet_addr("127.0.0.1"); //服务器地址 addSrv.sin_family = AF_INET; addSrv.sin_port = htons(PORT); connect(sockClient, (sockaddr FAR *)&addSrv, sizeof(addSrv)); char recvBuf[100]; recv(sockClient, recvBuf, 100, 0); printf("%s\n", recvBuf); send(sockClient, "hello123", strlen("hello123") + 1, 0); closesocket(sockClient); WSACleanup(); system("pause"); return 0; }
udpserver.cpp
#include "WinSock2.h" #include <stdio.h> #pragma comment(lib, "ws2_32.lib") #define PORT 1666 int main() { WORD wVersion = MAKEWORD(2, 2); int err; WSADATA wsaData; err = WSAStartup(wVersion, &wsaData); SOCKET sockSrv = socket(AF_INET, SOCK_DGRAM, NULL); sockaddr_in addSrv; addSrv.sin_addr.S_un.S_addr = htonl(INADDR_ANY); //或用inet_addr("192.168.1.1"); addSrv.sin_family = AF_INET; addSrv.sin_port = htons(PORT); bind(sockSrv, (sockaddr FAR *)&addSrv, sizeof(addSrv)); printf("server ip:%s\n", inet_ntoa(addSrv.sin_addr)); printf("server port:%d\n", ntohs(addSrv.sin_port)); while(TRUE) { sockaddr_in addClient; int iLen = sizeof(addClient); char recvBuf[100]; recvfrom(sockSrv, recvBuf, 100, 0, (sockaddr*)&addClient, &iLen); printf("client ip:%s\n", inet_ntoa(addClient.sin_addr)); printf("client port:%d\n", ntohs(addClient.sin_port)); printf("%s", recvBuf); } closesocket(sockSrv); WSACleanup(); return 0; }
udpclient.cpp
#include "WinSock2.h" #include <stdio.h> #pragma comment(lib, "ws2_32.lib") #define PORT 1666 int main() { WORD wVersion = MAKEWORD(2, 2); int err; WSADATA wsaData; err = WSAStartup(wVersion, &wsaData); SOCKET sockClient = socket(AF_INET, SOCK_DGRAM, NULL); sockaddr_in addSrv; addSrv.sin_addr.S_un.S_addr = inet_addr("127.0.0.1"); //或用inet_addr("192.168.1.1"); addSrv.sin_family = AF_INET; addSrv.sin_port = htons(PORT); sendto(sockClient, "hello", strlen("hello") + 1, 0, (SOCKADDR*)&addSrv, sizeof(addSrv)); closesocket(sockClient); WSACleanup(); system("pause"); return 0; }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?