Winsock是Windows网络编程下的规范,该规范是Windows下得到广泛应用的、开放的、支持多种协议的网络编程接口。
从1991年的1.0版到1995年的2.0.8版,经过不断完善并在Intel、Microsoft、Sun、SGI、Informix、Novell等公司的全力支持下,已成为Windows网络编程的事实上的标准。
Windows Sockets使用套接字进行编程,套接字编程是面向客户端/服务器模型而设计的,因此系统中需要客户端和服务器两个不同类型的进程,根据连接类型的不同,对于面向连接的TCP服务和无连接的UDP服务,服务器分别采取不同的处理操作来对客户提供服务。
面向连接
服务器
socket() -> bind() -> listen() -> accept() -> recv()/send() -> closesocket();
创建套接字,绑定IP和端口,侦听,接收连接,收发消息,关闭连接
客户端
socket() -> connet() -> send()/recv() -> closesocket();
创建套接字,连接服务器,发收消息,关闭连接
有一些小伙伴应该以为Dev c++不能写联机,但其实它可以,具体方法见文末!
好,直接上代码!
服务端:
#include#include #pragma comment(lib, "ws2_32.lib") using namespace std; int main() { WSADATA wsdata; WSAStartup(MAKEWORd(2, 2), &wsdata); SOCKET hServSock = socket(PF_INET, SOCK_STREAM, 0); SOCKADDR_IN servAddr; servAddr.sin_family = AF_INET; servAddr.sin_addr.s_addr = htonl(INADDR_ANY); servAddr.sin_port = htons(4096); bind(hServSock, (SOCKADDR*)&servAddr, sizeof(servAddr)); listen(hServSock, 5); SOCKADDR_IN clntAddr; int clntAddrSz = sizeof(clntAddr); SOCKET hSock = accept(hServSock, (SOCKADDR*)&clntAddr, &clntAddrSz); // 等待连接 // 到了这里就已经有电脑连上去了! cout << "连接成功!" << endl; char s[1024] = "发送的信息"; send(hSock, s, 1024, 0); cout << "已发送信息!" << endl; system("pause"); return 0; }
服务端运行后会等待客户端来连接,然后给客户端发一条信息,客户端也可以给服务端发送信息!
客户端:
#include#include #pragma comment(lib, "ws2_32.lib") using namespace std; int main() { WSADATA wsdata; WSAStartup(MAKEWORd(2, 2), &wsdata); SOCKET hSock = socket(PF_INET, SOCK_STREAM, 0); SOCKADDR_IN servAddr; servAddr.sin_family = AF_INET; servAddr.sin_addr.s_addr = inet_addr("127.0.0.1"); // 127.0.0.1要改成运行服务端的电脑的IP,推荐把它的IP固定住,方法自行查询! servAddr.sin_port = htons(4096); connect(hSock, (SOCKADDR*)&servAddr, sizeof(servAddr)); // 连接服务端 char s[1024] = {}; recv(hSock, s, 1024, 0); // 等待对方发送信息,然后接收到s数组中,读1024个字符 cout << s << endl; system("pause"); return 0; }
切记,切记,一定要先运行服务端,不然会出错!运行服务端后再运行客户端,然后客户端连接上服务端后就接收服务端的信息到字符数组s里去,然后输出,具体怎么用请自行修改!
用dev c++也能运行这段代码的方法:首先,在dev c++中点击工具,然后点击编译选项,把编译时加入以下命令选上,然后把里面的内容改成-std=c++11,然后再勾选在连接器命令行加入以下命令,然后把里面的内容改成-static-libgcc -l wsock32就可以了。
我的运行效果是
服务端:
客户端:
好,这就说明我们已经成功了!
都看到这里了,给作者点个赞吧~



