C++实现socket
一图理解socket遍程的过程
C++里面socket的使用
1. server使用步骤
1、包含头文件和链接库
#include<winsock.h>
#pragma comment(lib,"ws2_32.lib")
2、初始化套接字库
void initialization() {
//初始化套接字库
WORD w_req = MAKEWORD(2, 2);//版本号
WSADATA wsadata;
int err;
err = WSAStartup(w_req, &wsadata);
if (err != 0) {
cout << "初始化套接字库失败!" << endl;
}
else {
cout << "初始化套接字库成功!" << endl;
}
//检测版本号
if (LOBYTE(wsadata.wVersion) != 2 || HIBYTE(wsadata.wHighVersion) != 2) {
cout << "套接字库版本号不符!" << endl;
WSACleanup();
}
else {
cout << "套接字库版本正确!" << endl;
}
//填充服务端地址信息
}
3、创建socket:socket()
SOCKET socket_server;
socket_server = socket(AF_INET, SOCK_STREAM, 0);
4、在SOCKEADDR_IN结构体中设置IP地址和端口号,并进行绑定 bind()
//定义服务器端地址和客户端地址
SOCKADDR_IN server_addr;
SOCKADDR_IN accept_addr;
server_addr.sin_family = AF_INET; //IP地址家族
server_addr.sin_addr.S_un.S_addr = htonl(INADDR_ANY); //IP:INADDR_ANY泛指本机,既本机的所有IP
server_addr.sin_port = htons(2020); //端口号
bind(socket_server, (SOCKADDR *)&server_addr, sizeof(SOCKADDR)); //失败返回SOCKET_ERROR
5、设置套接字为监听状态:listen()
listen(socket_server, SOMAXCONN);//失败返回负
6、接受来自客户端请求:accept()
len = sizeof(SOCKADDR);
SOCKET socket_accept;
socket_accept = accept(socket_server, (SOCKADDR *)&accept_addr, &len); //返回的是SOCKET对象
7、收发信息:recv() send()
int send_len = 0;
int recv_len = 0;
char send_buff[100];
char recv_buff[100];
recv_len = recv(socket_accept, recv_buf, 100, 0);//接收客户端发来的消息
send_len = send(socket_accept, send_buf, 100, 0);//像客户端发送信息
8、关闭套接字,释放DLL资源:closesocket() WSACleanup()
closesocket(socket_server);
closesocket(socket_accept);
WSACleanup();
2.client使用步骤
1、包含头文件和链接库
2、初始化套接字库
3、创建socket:socket()
SOCKET socket_client;
socket_client = socket(AF_INET, SOCK_STREAM, 0);
4、在SOCKEADDR_IN结构体中设置IP地址和端口号,并连接到指定服务器:connect(),
//利用SOCKEADDR_IN结构体设置服务器ip地址和端口号
SOCKADDR_IN server_addr;
server_addr.sin_family = AF_INET;
server_addr.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");
server_addr.sin_port = htons(2020);
//进行连接
connect(socket_client, (SOCKADDR *)&server_addr, sizeof(SOCKADDR)); //若连接失败,返回SOCKET_ERROR
5、收发信息:recv() send()
6、关闭套接字,释放DLL资源: