学习Windows 环境 socket--TCP 连接

TCP连接分为服务端和客户端。

服务端:

1.包含都文件  以及需要连接的动态库:

#include<WS2tcpip.h>
#include <process.h>
#pragma comment (lib,"ws2_32.lib")

 2.创建Windows下存储socket版本信息的结构体并调用WSAStartup()函数确定版本信息:

WSADATA wd;
	int n = WSAStartup(0X0202, &wd);
	if (n)
	{
		std::cout << "版本使用错误:" << WSAGetLastError() << std::endl;
		return -1;
	}

WSAStartup()函数调用成功返回 0,不成功返回非0。可以用WSAGetLastError()函数查看错误代码。

3.调用int sock = socket(AF_INET, SOCK_STREAM, 0);,创建socket 句柄。

SOCKET sock = socket(AF_INET, SOCK_STREAM, 0);//AF_INET是表示Internet,
                                              //SOCK_STREAM 为TCP协议标志
if (INVALID_SOCKET == sock)
	{
		std::cout << "句柄创建化失败:" << WSAGetLastError() << std::endl;
		return -1;
	}

4.调用bind(sock, (struct sockaddr*)&server_addr, sizeof(server_addr));

绑定端口及ip,服务器端可以般绑定全网段(ip=0)。

    sockaddr_in server_addr = { AF_INET,htons(8585) };
	server_addr.sin_addr.S_un.S_addr = 0;
	n = bind(sock, (sockaddr*)&server_addr, sizeof(server_addr));
	if (n)
	{
		std::cout << "端口绑定失败:" << WSAGetLastError() << std::endl;
		return -1;
	}

5.监听连接请求:使用 listen() 函数监听客户端连接请求。

    int  n = listen(sock, 5);
	if (n)
	{
		std::cout << "监听失败:" << WSAGetLastError() << std::endl;
		return -1;
	}

6.接受客户端连接请求:使用 accept() 函数接受客户端的连接,并返回一个新的句柄,用于与客户端进行通信。

SOCKET psock;
psock = accept(sock, (sockaddr*)&client_addr, &client_addr_len);

7.使用 send()recv() 函数发送和接收数据。

char buffer[256];

// 发送数据
send(psock, buffer, strlen(buffer), 0);

// 接收数据
recv(psock, buffer, sizeof(buffer), 0);

8.关闭套接字:使用 close() 函数关闭套接字。

客户端:

客户端前三步同服务的相同,客户端不需要绑定端口及IP。

4.使用connect(sock,(sockaddr*)&server_addr,sizeof(server_addr) )函数连接服务器。

    sockaddr_in server_addr= { AF_INET };
	server_addr.sin_port = htons(8585);
	inet_pton(AF_INET, "192.168.100.100" ,& server_addr.sin_addr);
	int n = connect(sock,(sockaddr*)&server_addr,sizeof(server_addr) );
	if (n)
	{
		std::cout << "连接服务器失败:" << WSAGetLastError() << std::endl;

	}

5.同服务端相同,使用 send()recv() 函数发送和接收数据。

6.关闭套接字:使用 close() 函数关闭套接字。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值