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资源:

参考:
C++:实现socket通信(TCP/IP)实例

猜你喜欢

转载自blog.csdn.net/weixin_42040046/article/details/104866367