首页 > 编程语言 >C语言网络编程winsock

C语言网络编程winsock

时间:2023-02-16 16:14:33浏览次数:56  
标签:addr SOCKET socketaddr 编程 param C语言 接字 winsock 客户端

目录

前言

参考自
https://www.bilibili.com/video/BV1s7411z7jK/?spm_id_from=333.1007.top_right_bar_window_history.content.click

思路

初始化DLL
创建套接字
绑定套接字
连接服务器/监听客户端
接受/发送服务器/客户端发来的消息
关闭DLL
关闭套接字

服务器代码

#include <iostream>
#include <WinSock2.h>

#pragma comment(lib, "ws2_32.lib")

using namespace std;

int main()
{
	/****************************初始化DLL****************************/

    WSADATA wsadata;
    /**
     * @brief:初始化DLL
     * @param[in]:指明winsock版本
     * @param[out]:存放返回数据
     **/
    WSAStartup(MAKEWORD(2, 2), &wsadata);

	/****************************初始化socket****************************/
    /**
     * @brief:创建套接字
     * @param[in]:IP类型,PF_INET,ipv4
     * @param[in]:套接字类型,SOCK_STREAM,流式套接字
     * @param[in]:协议类型,IPPROTO_TCP,TCP协议
     **/
    SOCKET serversocket = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);

	/****************************分配socket空间****************************/

    sockaddr_in socketaddr;

    /**
     * @brief:清空部分内存
     * @param[in]:清空部分内存地址
     * @param[in]:清空部分内存大小
     **/
    ZeroMemory(&socketaddr, sizeof(socketaddr));
    socketaddr.sin_family = PF_INET;
    socketaddr.sin_addr.s_addr = inet_addr("127.0.0.1");
    socketaddr.sin_port = htons(1234);

	/****************************绑定套接字****************************/

	bind(serversocket, (sockaddr *)&socketaddr, sizeof(socketaddr));

	/****************************服务器监听客户端****************************/

    /**
     * @brief:监听套接字
     * @param[in]:SOCKET实例
     * @param[in]:SOCKET地址
     * @param[in]:SOCKET大小
     **/
    listen(serversocket, 20);

	/****************************配置客户端信息****************************/
    SOCKADDR clientaddr;
    int size = sizeof(clientaddr);

    /**
     * @brief:接收客户端请求
     **/
    SOCKET clientsocket = accept(serversocket, (sockaddr *)&clientaddr, &size);

	/****************************发送消息****************************/

	cout << "Connect success!Ready!" << endl;
	const char *message = "hello world";

    /**
     * @brief:与客户端通信
     * @param[in]:客户端套接字
     * * @param[in]:发送的数据
     * * @param[in]:数据大小
     * * @param[in]:默认为0
     **/
    send(clientsocket, message, (int)strlen(message), 0);

	/****************************关闭服务器****************************/

    /**
     * @brief:关闭套接字
     * @param[in]:
     * @note:
     **/
    closesocket(clientsocket);
    closesocket(serversocket);

    /**
     * @brief:停止使用DLL
     * @note:
     **/
    WSACleanup();

    system("pause");

    return 0;
}


客户端

#include <iostream>

#include <WinSock2.h>

#pragma comment(lib, "ws2_32.lib")

using namespace std;

int main()
{
    //初始化DLL
    WSADATA wsadata;
    WSAStartup(MAKEWORD(2, 2), &wsadata);
    //创建套接字
    //绑定套接字
    SOCKET clientsocket = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);
    sockaddr_in socketaddr;
    ZeroMemory(&socketaddr, sizeof(socketaddr));
    socketaddr.sin_family = PF_INET;
    socketaddr.sin_addr.s_addr = inet_addr("127.0.0.1");
    socketaddr.sin_port = htons(1234);

	//连接服务器
    connect(clientsocket, (sockaddr *)&socketaddr, sizeof(socketaddr));

    // 接受服务器发来的消息
    char recieve[512] = {0};
    recv(clientsocket, recieve, 512, 0);
    cout << "Message from Server:" << recieve << endl;
    //关闭套接字
    closesocket(clientsocket);
    WSACleanup();
    cin.get();
    cin.get();
    return 0;
}

效果图

标签:addr,SOCKET,socketaddr,编程,param,C语言,接字,winsock,客户端
From: https://www.cnblogs.com/cnleika/p/17116719.html

相关文章

  • 如何展示C语言源文件的汇编代码文件及其二进制目标代码?
    假设一个C语言源文件包含如下函数定义:longmult2(long,long);voidmultstore(longx,longy,long*dest){ longt=mult2(x,y); *dest=t;}在命令行上使用"......
  • .NET 中的并发编程
    今天我们购买的每台电脑都有一个多核心的CPU,允许它并行执行多个指令。操作系统通过将进程调度到不同的内核来发挥这个结构的优点。然而,还可以通过异步I/O操作和并行处理......
  • Linux下嵌入式Web服务器BOA和CGI编程开发
    一、环境搭建二、相关配置(部分)三、调试运行四、测试源码参考五、常见错误六、扩展(CCGI,SQLite)# 一、环境搭建操作系统:Ubuntu12.04LTSboa下载地址(但是我找不到...): http......
  • 一个服务器对多个客户端的本地socket通信C语言实现
    对于同一台主机间的多个进程间通信,除了使用共享内存,消息队列等方式,使用本地socket也是很高效的一种选择。不同于网络socket,本地socket不需要指定ip地址,也不需要进行网......
  • c语言文件读写
    C语言文件读写算法1.fseek()函数此函数用于移动文件指针到指定位置。例如,要将文件指针移动到文件的第5个字节处,您可以使用以下代码:fseek(fp,5,SEEK_SET);//将文件......
  • Python+chatGPT编程5分钟快速上手,强烈推荐!!!
    最近一段时间chatGPT火爆出圈!无论是在互联网行业,还是其他各行业都赚足了话题。俗话说:“外行看笑话,内行看门道”,今天从chatGPT个人体验感受以及如何用的角度来分享一下。......
  • Python 高级编程之正则表达式(八)
    目录一、概述二、正则表达式语法1)字符匹配2)字符集合3)定位符4)分组1、定义分组2、引用分组3、命名分组三、Python的re模块1)re.match()方法2)re.search()方法3)re.match()......
  • C语言学生课程选修管理系统[2023-02-15]
    C语言学生课程选修管理系统[2023-02-15]课程设计题目及要求本课题要求用C语言编写一个学生课程选修管理系统。学生课程选修系统用于学生选修学习课程。系统可以管理若干......
  • Python黑客编程之权限提升
    描述登录目标机器后,需要获取system权限,可选择方式有攻击驱动程序或者系统内核,较难且容易导致系统奔溃,考虑到某些高权限任务所依赖的文件或者程序可以被低权限用户修改,如......
  • Python黑客编程之数据渗漏
    描述入侵到目标主机后,发现有趣的文件,将其加密后,通过ftp文件\邮件\第三方网站的方式将密文传输到自己的机子上,在本地还原数据文件利用邮件传输#smtpsmtp_server='s......