gpt4 book ai didi

c - 使用套接字编程发送和接收字符串缓冲区的 3 个元素

转载 作者:行者123 更新时间:2023-11-30 17:26:03 24 4
gpt4 key购买 nike

我正在编写一个程序来发送和接收 3 个字符的字符串缓冲区。以下代码使用指针打印缓冲区。我想添加一个功能,一次发送这些元素3个,即每次3个指令以ff开头,使用套接字编程函数send(这是一个TCP连接,因此使用send)

//Write a simple echo server

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <string>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <arpa/telnet.h>
#include <unistd.h>
using namespace std;

string buff1[]= {"0xff , 0xfd, 0x18,0xff,0xfd,0x23","0xff , 0xfd, 0x1e","0xff , 0xfd, 0x1d","0xff ,0xfd,0x17"};

int main()
{
int sockfd , newsockfd , portno;
socklen_t clilen;
char buffer[256];
struct sockaddr_in serv_addr, cli_addr;
int n;
printf("\n=====================================================\nServer Side\n=====================================================\n");
while(buff1[count].length()>0)
{
const unsigned char *ptr = (const unsigned char*)buff1[count].c_str();
printf("Server Sending message %d of size:%d",count,buff1[count].length());
for(int i = 0 ; i < buff1[count].length(); i++)
{
printf("%c",*ptr);
ptr++;
}
printf("\n");
count++;
}
return(0);
}

输出:

debian:~/sam$ ./single_sample

=====================================================
Server Side
=====================================================
Server Sending message 0 size32 :0xff , 0xfd, 0x18,0xff,0xfd,0x23
Server Sending message 1 size17 :0xff , 0xfd, 0x1e
Server Sending message 2 size17 :0xff , 0xfd, 0x1d
Server Sending message 3 size18 :0xff , 0xfd , 0x17
Segmentation fault

我有以下疑问:a) 为什么输出显示段错误?b) 在哪里插入 Send() 方法来发送每条消息的 3 个元素:

Send 1 : 0xff,0xfd,0x18
Send 2 : 0xff,0xfd,0x23

提前致谢

最佳答案

您的循环将超过长度为 4 的 buff1 数组的末尾,因此它应该只从 count 0 到 3 进行迭代。我建议您使用 for 循环而不是 while 循环,并设置一个条件来检查以确保当 count 到达数组长度末尾时停止。否则,当您的循环到达 count=4 并尝试访问 buff1[count].length() 时,将会导致段错误。

const int buff_len = 4;
for (int count=0; count < buff_len; count++)
{
const unsigned char *ptr = (const unsigned char*)buff1[count].c_str();
printf("Server Sending message %d of size:%d",count,buff1[count].length());
for(int i = 0 ; i < buff1[count].length(); i++)
{
printf("%c",*ptr);
ptr++;
}
printf("\n");
}

关于c - 使用套接字编程发送和接收字符串缓冲区的 3 个元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26896125/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com