
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就可以了。
我的运行效果是
服务端:
客户端:
好,这就说明我们已经成功了!
都看到这里了,给作者点个赞吧~
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)