2024年最新网口通讯与串口通讯(内含代码)_网口通信(1),2024年最新阿里+头条+腾讯大厂C C++笔试真题

img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上C C++开发知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以戳这里获取

    perror("socket");
    return -1;
}

// 设置服务器地址
memset(&servaddr, 0, sizeof(servaddr));
servaddr.sin_family = AF_INET;
servaddr.sin_addr.s_addr = inet_addr(ipaddr);
servaddr.sin_port = htons(port);

// 连接服务器
if (connect(sockfd, (struct sockaddr*)&servaddr, sizeof(servaddr)) < 0) {
    perror("connect");
    return -1;
}

// 发送数据
const char* msg = "Hello world";
int n = write(sockfd, msg, strlen(msg));
if (n < 0) {
    perror("write");
    return -1;
}

// 接收数据
char buf[1024];
n = read(sockfd, buf, sizeof(buf));
if (n < 0) {
    perror("read");
    return -1;
}
buf[n] = '\0';
std::cout << "Received: " << buf << std::endl;

// 关闭Socket
close(sockfd);

return 0;

}


在以上示例代码中,使用了`socket`函数创建了一个TCP Socket,使用`connect`函数连接到服务器,使用`write`函数发送数据,使用`read`函数接收数据,最后使用`close`函数关闭Socket。其中,`sockaddr_in`结构体用于存储服务器地址信息,`inet_addr`函数将IP地址转换为二进制格式,`htons`函数将端口号转换为网络字节序。


(2)服务器:


![](https://img-blog.csdnimg.cn/7bb6d58aa4244602bbdd09874f02954e.png)




//以下是一个简单的网口通讯的服务端的C++示例:
#include
#include <string.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <unistd.h>

using namespace std;

int main(int argc, char *argv[]) {
int server_fd, new_socket, valread;
struct sockaddr_in address;
int opt = 1;
int addrlen = sizeof(address);
char buffer[1024] = {0};
const char *hello = “Hello from server”;

// 创建socket
if ((server_fd = socket(AF_INET, SOCK_STREAM, 0)) == 0) {
    perror("socket failed");
    exit(EXIT_FAILURE);
}

// 设置socket选项
if (setsockopt(server_fd, SOL_SOCKET, SO_REUSEADDR | SO_REUSEPORT, &opt, sizeof(opt))) {
    perror("setsockopt failed");
    exit(EXIT_FAILURE);
}

// 绑定IP和端口
address.sin_family = AF_INET;
address.sin_addr.s_addr = INADDR_ANY;
address.sin_port = htons(8080);

if (bind(server_fd, (struct sockaddr *)&address, sizeof(address))<0) {
    perror("bind failed");
    exit(EXIT_FAILURE);
}

// 监听连接
if (listen(server_fd, 3) < 0) {
    perror("listen failed");
    exit(EXIT_FAILURE);
}

// 等待客户端连接
if ((new_socket = accept(server_fd, (struct sockaddr *)&address, (socklen_t*)&addrlen))<0) {
    perror("accept failed");
    exit(EXIT_FAILURE);
}

// 接收客户端数据
valread = read(new_socket, buffer, 1024);
printf("%s\n", buffer);

// 发送数据给客户端
send(new_socket, hello, strlen(hello), 0);
printf("Hello message sent\n");

// 关闭socket
close(new_socket);
close(server_fd);

return 0;

}


 运行该程序后,服务端会监听8080端口,并等待客户端连接。当客户端连接成功后,服务端会接收客户端发送的数据,并发送一条“Hello from server”的消息给客户端。最后,服务端会关闭socket。 


#### 四、打开串口,实现通讯的步骤:(附代码)



//以下是一个简单的串口通讯的C++示例代码:

#include
#include <windows.h>

using namespace std;

int main()
{
HANDLE hComm;
char port[] = “COM1”;
DWORD dwBytesWritten, dwBytesRead;
char buffer[1024] = {0};

hComm = CreateFile(port, GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL);

if (hComm == INVALID_HANDLE_VALUE)
{
    cout << "Failed to open serial port" << endl;
    return 1;
}

DCB dcbSerialParams = {0};
dcbSerialParams.DCBlength = sizeof(dcbSerialParams);

if (!GetCommState(hComm, &dcbSerialParams))
{
    cout << "Failed to get serial port settings" << endl;
    CloseHandle(hComm);
    return 1;
}

dcbSerialParams.BaudRate = CBR_9600;
dcbSerialParams.ByteSize = 8;
dcbSerialParams.StopBits = ONESTOPBIT;
dcbSerialParams.Parity = NOPARITY;

if (!SetCommState(hComm, &dcbSerialParams))
{
    cout << "Failed to set serial port settings" << endl;
    CloseHandle(hComm);
    return 1;
}

while (true)
{
    if (!ReadFile(hComm, buffer, sizeof(buffer), &dwBytesRead, NULL))
    {
        cout << "Failed to read from serial port" << endl;
        CloseHandle(hComm);
        return 1;
    }

    if (dwBytesRead > 0)
    {
        cout << "Received data: " << buffer << endl;

        if (!WriteFile(hComm, buffer, dwBytesRead, &dwBytesWritten, NULL))
        {
            cout << "Failed to write to serial port" << endl;
            CloseHandle(hComm);
            return 1;
        }
    }
}

CloseHandle(hComm);
return 0;

}


该示例代码打开COM1串口,并设置波特率为9600,数据位为8,停止位为1,无奇偶校验。然后进入一个无限循环,不断从串口读取数据,并将读取到的数据原样发送回去。




![img](https://img-blog.csdnimg.cn/img_convert/65d3bd81eaf09e1f7d1cbaa21ebebd8c.png)
![img](https://img-blog.csdnimg.cn/img_convert/007d0f7308f9680779e987e214e1eb05.png)

**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上C C++开发知识点,真正体系化!**

**由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新**

**[如果你需要这些资料,可以戳这里获取](https://bbs.csdn.net/topics/618668825)**

573884)]

**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上C C++开发知识点,真正体系化!**

**由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新**

**[如果你需要这些资料,可以戳这里获取](https://bbs.csdn.net/topics/618668825)**

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值