前两天写了篇文章:winsock微信然后我怕有人不懂,出个教程吧,这样出了问题你们也能自己解决
码字不易,点赞收藏加关注!!!
先讲服务端(出两篇教程,骗流量卷)
#define _WINSOCK_DEPRECATED_NO_WARNINGS
#include<WinSock2.h>
#pragma comment(lib,"ws2_32")
#include<bits/stdc++.h>
using namespace std;
int main() {
WSADATA data;
int ret=WSAStartup(MAKEWORD(2,2),&data);//初始化
if (ret) {
cout << "初始化网络错误!" << endl;
WSACleanup();
return -1;
}
SOCKET sock=socket(AF_INET,SOCK_STREAM,0);//建套接字
if (sock == -1) {
cout << "创建套接字失败";
WSACleanup();
return -1;
}
char a[100];
cout<<"你的ip:";
cin>>a;
cout<<endl;
sockaddr_in addr;
addr.sin_family = AF_INET;
addr.sin_port = htons(80);
addr.sin_addr.S_un.S_addr = inet_addr(a);
ret=bind(sock,(sockaddr*)&addr, sizeof(addr));//绑定地址
if (ret == -1) {
cout << "绑定地址端口失败";
WSACleanup();
return -1;
}
ret=listen(sock,5);//开启监听
if (ret == -1) {
cout << "监听套接字失败";
WSACleanup();
return -1;
}
sockaddr addrCli;
int len = sizeof(addrCli);
SOCKET sockCli=accept(sock,&addrCli,&len);//同意连接
if (sockCli == -1) {
cout << "接收客户端连接失败";
WSACleanup();
return -1;
}
char buf[0xFFF];
cout<<"我:";
while(1){
cin>>buf;
ret=send(sockCli, buf, strlen(buf),0);//发送
if (ret == -1) {
cout << "发送信息失败";
WSACleanup();
return -1;
}
ret=recv(sockCli,buf,0xFFF,0);//接收
if (ret <= 0) {
cout << "接受客户端数据失败";
WSACleanup();
return -1;
}
cout<<"客户:"<<buf<<endl<<"我:";
}
}
有点长,拆开讲
#include<WinSock2.h>
#pragma comment(lib,"ws2_32")
this:头文件+链接库文件
WSADATA data;
int ret=WSAStartup(MAKEWORD(2,2),&data);//初始化
this:初始化,每个都要写,不然没法用
SOCKET sock=socket(AF_INET,SOCK_STREAM,0);//建套接字
this:建套接字
格式:SOCKET socket(int af,int type,int protocol);
- af:一个地址家族,通常为AF_INET
- type:套接字类型SOCK_STREAM面向连接的流式套接字,SOCK_DGRAM面向无连接的数据包式套接字,SOCK_RAW原始套接字。
- protocol:协议(0就行啦)
sockaddr_in addr;
addr.sin_family = AF_INET;
addr.sin_port = htons(80);
addr.sin_addr.S_un.S_addr = inet_addr(a);
ret=bind(sock,(sockaddr*)&addr, sizeof(addr));//绑定地址
this:绑定地址
bind参数一:套接字
二:一个结构指针,包含地址和接口
三:上个参数的长度
addr.sin_addr.S_un.S_addr = inet_addr(写自己地址);
ret=listen(sock,5);//开启监听
this:开始监听
listen参数一:套接字
参数二:听几个人
sockaddr addrCli;
int len = sizeof(addrCli);
SOCKET sockCli=accept(sock,&addrCli,&len);//同意连接
this:就是监听到了后去连接
accept参数一:套接字
参数二:一组用户端的地址、端口
参数三:参数二的长度
注:此时用户端的信息等数据已经迁移至sockCli,操作时别用混。
char buf[0xFFF];
cout<<"我:";
while(1){
cin>>buf;
ret=send(sockCli, buf, strlen(buf),0);//发送
if (ret == -1) {
cout << "发送信息失败";
WSACleanup();
return -1;
}
ret=recv(sockCli,buf,0xFFF,0);//接收
if (ret <= 0) {
cout << "接受客户端数据失败";
WSACleanup();
return -1;
}
cout<<"客户:"<<buf<<endl<<"我:";
}
this:控制发送接收
send:发送
recv:接受
相信你在刚才已经学了很多,接下来你自己解释(还是不会?关注后找我私聊)
教程二链接:winsock微信讲解(2)
看在你都看到这里的份上,点点赞吧