请教TCP Client发送完一段字符串后如何发送一个回车
我现在的发送端发送了字符串 PRESET -a 1 (1后面有空格)
接收端收到:50 52 45 53 45 54 20 2D 61 20 31 20 
这段字符串后还需要一个 0D 我的指令才能控制接收端程序,那么这个 0D 在发送端该怎么写,才能让接收端收到 0D
也就是接收端需要收到:50 52 45 53 45 54 20 2D 61 20 31 20 0D 才能受控
感谢大神指教,新手不懂TCP

解决方案 »

  1.   

    电脑内存或文件内容或传输内容只是一个一维二进制字节数组及其对应的二进制地址;
    人脑才将电脑内存或文件内容或传输内容中的这个一维二进制字节数组及其对应的二进制地址的某些部分看成是整数、有符号数/无符号数、浮点数、复数、英文字母、阿拉伯数字、中文/韩文/法文……字符/字符串、汇编指令、函数、函数参数、堆、栈、数组、指针、数组指针、指针数组、数组的数组、指针的指针、二维数组、字符点阵、字符笔画的坐标、黑白二值图片、灰度图片、彩色图片、录音、视频、指纹信息、身份证信息……
    void HexDump(char *buf,int len,int addr) {
        int i,j,k;
        char binstr[80];    for (i=0;i<len;i++) {
            if (0==(i%16)) {
                sprintf(binstr,"%08x -",i+addr);
                sprintf(binstr,"%s %02x",binstr,(unsigned char)buf[i]);
            } else if (15==(i%16)) {
                sprintf(binstr,"%s %02x",binstr,(unsigned char)buf[i]);
                sprintf(binstr,"%s  ",binstr);
                for (j=i-15;j<=i;j++) {
                    sprintf(binstr,"%s%c",binstr,('!'<buf[j]&&buf[j]<='~')?buf[j]:'.');
                }
                printf("%s\n",binstr);
            } else {
                sprintf(binstr,"%s %02x",binstr,(unsigned char)buf[i]);
            }
        }
        if (0!=(i%16)) {
            k=16-(i%16);
            for (j=0;j<k;j++) {
                sprintf(binstr,"%s   ",binstr);
            }
            sprintf(binstr,"%s  ",binstr);
            k=16-k;
            for (j=i-k;j<i;j++) {
                sprintf(binstr,"%s%c",binstr,('!'<buf[j]&&buf[j]<='~')?buf[j]:'.');
            }
            printf("%s\n",binstr);
        }
    }
      

  2.   

    这不是我要的答案呀,
    我问的是我要在发送的时候在PRESET -a 1 之后加什么
    才能让接收端收到
    50 52 45 53 45 54 20 2D 61 20 31 20 0D
      

  3.   

    '\r'
    '\x0d'
      

  4.   

    这两个用过,都是不对的
    估计是你的协议没分析清楚,传送数据0D不一定是回车的意思,要看接收端怎么解析这个数字
    就是用TCP Client这个软件测试的呀,我的目的其实也不是一定要发回车,接收端在我发送的字符串末尾能收到0D就行
      

  5.   

    我现在的发送端发送了字符串 PRESET -a 1 (1后面有空格)
    接收端收到:
    50 52 45 53 45 54 20 2D 61 20 31 20 
    但是我的接收端需要收到:
    50 52 45 53 45 54 20 2D 61 20 31 20 0D
    才能执行受控,问题就是怎么把0D加在后面发给他
      

  6.   

    我在讨论代码,你在讨论软件,不是一个频道,发送一个回车
    char * SendData="PRESET -a 1 \n";
    send(SocketID,(char*)&SendData,strlen(SendData)+1, 0);
    就解决了,不是写代码的话,就没法讨论的
      

  7.   

    好吧,主要我不懂代码,谢谢了!
    我就是单纯的想知道用这个软件发什么内容过去能达到我的目的,让接收端能收到0D
    因为尾部要有0D我才能控制实际受控的设备
    本身这就不是个事,你硬要用别人写好的只发送可见字符的软件发不可见字符。有原代码的话,稍改下,没有的话就另找个能发的
    好,非常感谢,那是我的思路不对哈哈
    有这方面的软件推荐吗,能发送和监听tcp满足我这种发不可见字符的
      

  8.   

    好吧,主要我不懂代码,谢谢了!
    我就是单纯的想知道用这个软件发什么内容过去能达到我的目的,让接收端能收到0D
    因为尾部要有0D我才能控制实际受控的设备
    本身这就不是个事,你硬要用别人写好的只发送可见字符的软件发不可见字符。有原代码的话,稍改下,没有的话就另找个能发的
    补充一下,主要是我的受控端是进口的硬件我没法修改,他不收到0D不执行命令,
    这个0D应该是告诉他“我发完了,你执行吧”
      

  9.   

    好吧,主要我不懂代码,谢谢了!
    我就是单纯的想知道用这个软件发什么内容过去能达到我的目的,让接收端能收到0D
    因为尾部要有0D我才能控制实际受控的设备
    本身这就不是个事,你硬要用别人写好的只发送可见字符的软件发不可见字符。有原代码的话,稍改下,没有的话就另找个能发的
    补充一下,主要是我的受控端是进口的硬件我没法修改,他不收到0D不执行命令,
    这个0D应该是告诉他“我发完了,你执行吧”
    这个事是个很简单的事,用代码弄的话
      

  10.   

    '\n ','\x0A','\x0a',10
    '\r','\x0D','\x0d',13
    电脑内存或文件内容或传输内容只是一个一维二进制字节数组及其对应的二进制地址;
    人脑才将电脑内存或文件内容或传输内容中的这个一维二进制字节数组及其对应的二进制地址的某些部分看成是整数、有符号数/无符号数、浮点数、复数、英文字母、阿拉伯数字、中文/韩文/法文……字符/字符串、汇编指令、函数、函数参数、堆、栈、数组、指针、数组指针、指针数组、数组的数组、指针的指针、二维数组、字符点阵、字符笔画的坐标、黑白二值图片、灰度图片、彩色图片、录音、视频、指纹信息、身份证信息……
    void HexDump(char *buf,int len,int addr) {
        int i,j,k;
        char binstr[80];    for (i=0;i<len;i++) {
            if (0==(i%16)) {
                sprintf(binstr,"%08x -",i+addr);
                sprintf(binstr,"%s %02x",binstr,(unsigned char)buf[i]);
            } else if (15==(i%16)) {
                sprintf(binstr,"%s %02x",binstr,(unsigned char)buf[i]);
                sprintf(binstr,"%s  ",binstr);
                for (j=i-15;j<=i;j++) {
                    sprintf(binstr,"%s%c",binstr,('!'<buf[j]&&buf[j]<='~')?buf[j]:'.');
                }
                printf("%s\n",binstr);
            } else {
                sprintf(binstr,"%s %02x",binstr,(unsigned char)buf[i]);
            }
        }
        if (0!=(i%16)) {
            k=16-(i%16);
            for (j=0;j<k;j++) {
                sprintf(binstr,"%s   ",binstr);
            }
            sprintf(binstr,"%s  ",binstr);
            k=16-k;
            for (j=i-k;j<i;j++) {
                sprintf(binstr,"%s%c",binstr,('!'<buf[j]&&buf[j]<='~')?buf[j]:'.');
            }
            printf("%s\n",binstr);
        }
    }
      

  11.   


    找个TCP调试工具,能够发送十六进制就可以了。NetAssist.exe