C++ Winsock进行联机通信

C++ Winsock进行联机通信,第1张

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就可以了。 

我的运行效果是

服务端:

客户端:

 

好,这就说明我们已经成功了! 

都看到这里了,给作者点个赞吧~

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/1325988.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-06-12
下一篇2022-06-12

发表评论

登录后才能评论

评论列表(0条)

    保存