请问一下,c++ socket接收到数据长度和实际不一致

图片说明

图片说明

如图所示,图一未返回的接收到的字节长度20,但是实际上revData里面的数据为"1234",请问这是什么原因?

c++

1个回答

调试器显示的recvData 是指可见的字符串。

如果后面还有其他内容可能显示不了的,比如1234后面是\0 就显示成这样

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
请问一下,c++ socket接收到数据长度和实际不一致
![图片说明](https://img-ask.csdn.net/upload/201902/24/1550993325_415320.png)rnrn![图片说明](https://img-ask.csdn.net/upload/201902/24/1550993333_995105.png)rnrn如图所示,图一未返回的接收到的字节长度20,但是实际上revData里面的数据为"1234",请问这是什么原因?
菜鸟请教大神们一个问题,c++ socket接收到数据长度和实际不一致是什么原因?
[img=https://img-bbs.csdn.net/upload/201902/24/1550993563_85338.png][/img]rnrn[img=https://img-bbs.csdn.net/upload/201902/24/1550993570_847714.png][/img]rn如图所示,图一为返回的接收到的字节长度20,但是实际上revData里面的数据为"1234",请问这是什么原因?
winCE 与 windows 接收到的串口数据不一致
串口编程,对设备发送串口命令,设备返回结果rnrn在windows下用串口助手测试没问题,然后下载了一个winCE的串口助手在winCE6.0里测试返回的结果不对,同一个命令有时候返回27个结果,有时候返回28,还会返回34。正常是返回32个。rnrnrn然后是怀疑wince串口助手问题,自己写了一个小程序来测试,还是一样。rnrnrn我winCE还需要串口控制另外一个设备。这个设备发7个,返回7个。在windows和CE里都正常。rn就是另一个设备发8个应该返回32个,只在windows里正常,我想要在CE里正常rnrnrn求助各位大神
silverlight socket中如何知道实际接收到多少数据?
[code=C#]rn byte[] bytes = new byte[1024];rn e.SetBuffer(bytes, 0, bytes.Length);rn socket.ReceiveAsync(e);rn[/code]rnrn我把缓冲区设成1024,那么结果收到的长度不足1024,也是1024,后面都是\0,空白,这怎么处理.在同步的TCP中,我知道我的TCP接收到对方发来的数据大小.真是郁闷.rnrn如果传输仅限字符串,也好,我trim掉,即可,可不一定传输字符串啊rnrnsilverlight socket MS只能用异步的rn 如何知道实际接收到多少数据?而不是我设置的大小
生数据的传输用Socket如何实现及如何判断BYTE型数据接收到实际长度
我想实现一些关于语音,图像的信息,由于是使用CSocket,于是也使用了MFC推建的CSocketFile和CArchive相结合的方式。由于我想传送的是BYTE型数据,因此无法直接使用>>操作符(不知道有没有什么好的方法),于是采用了CArchive的Read/Write功能。问题是,由于定义的数组是BYTE数组,我在接收的时候,如何知道实际得到的字符长度。memXXX系列的函数好像没有一个memsize的东东。rn 请指教!
Socket 接收到乱码
开发工具eclipse:客户端输入的字符串为中文,服务器接收控制台输出正常。rnrn客户端输入的字符串为字母,服务器接收控制台输出不正常,控制台输出不正常:如: rn客户端输入字符串: "abc"rn服务端显示: "abc□□□□□□□□ 很多rn原因是服务端字节数组大小为1024,但是为什么客户端发送中文就正常呢? 求解,怎么解决。rn rn[code=Java]rn/**rn * 服务端rn */rnpublic class Service rn public static void main(String []args)rn try rn ServerSocket server = new ServerSocket(9111);rn Socket socket = server.accept(); //阻塞rn InputStream in = socket.getInputStream();rn [color=#FF0000]byte[] data = new byte[1024];rn in.read(data );rn System.out.println(new String(data )); //输出[/color] catch (IOException e) rn e.printStackTrace();rn rn rnrn[/code]rn[code=Java]rn//客户端rnpublic class Client rn public static void main(String []args)rn Socket socket = null;rn try rn socket = new Socket("127.0.0.1",9111);rn System.out.println("请输入一段字符串");rn Scanner input = new Scanner(System.in);rn String str = input.next(); rn OutputStream out = socket.getOutputStream();rn out.write(str.getBytes());rn out.flush();rn socket.close();rn catch (UnknownHostException e) rn e.printStackTrace();rn catch (IOException e) rn e.printStackTrace();rn rn rnrnrn[/code]
socket 客户端收到的数据与服务器发送不一致问题
小弟在搭建一c/s架构的通信程序。现在遇到socket 客户端收到的数据与服务器发送不一致问题。客户端收到的数据总是比服务器端发送的少一点。如果在客户端程序中设置断点调试就能收全。百思不得其解,请各位高手帮助解决。rn注:(所有测试都在局域网内进行)rn服务器端使用ReadToEnd()方法将一文件一次性读出,然后再转换成UTF8码,再使用clientsocket.Send()方法一次传送给客户端。rnrn客户端部分代码如下:rnnamespace clientrnrnrn public class clientrn rn static Socket serverSocket = null;rn private static Socket ConnectSocket(string server, int port)rn rn Socket s = null;rn IPHostEntry hostEntry = null;rn rn // Get host related information.rn hostEntry = Dns.GetHostEntry(server);rnrn // Loop through the AddressList to obtain the supported AddressFamily. This is to avoidrn // an exception that occurs when the host IP Address is not compatible with the address familyrn // (typical in the IPv6 case).rn foreach(IPAddress address in hostEntry.AddressList)rn rn IPEndPoint ipe = new IPEndPoint(address, port);rn Socket tempSocket =new Socket(ipe.AddressFamily, SocketType.Stream, ProtocolType.Tcp);rnrn tempSocket.Connect(ipe);rnrn if(tempSocket.Connected)rn rn s = tempSocket;rn break;rn rn elsern rn continue;rn rn rn return s;rn rn rnrn // This method requests the home page content for the specified server.rn private static string SocketSendReceive(string server, int port) rn rn string request = "GET / HTTP/1.1\r\nHost: " + server +"\r\nConnection: Close\r\n\r\n";rn Byte[] bytesSent = Encoding.ASCII.GetBytes(request);rn Byte[] bytesReceived = new Byte[256];rn rn // Create a socket connection with the specified server and port.rn Socket s = ConnectSocket(server, port);rnrn if (s == null)rn return ("Connection failed");rn rn // Send request to the server.rn serverSocket = s;rn s.Send(bytesSent, bytesSent.Length, 0); rn rn // Receive the server home page content.rn Int32 bytes = 0;rn string page = "Default HTML page on " + server + ":\r\n";rnrn // The following will block until te page is transmitted.rnrn bytes = s.Receive(bytesReceived, bytesReceived.Length, 0);rn page = page + Encoding.ASCII.GetString(bytesReceived, 0, bytes);rn while(s.Available>0)rn rn bytes = s.Receive(bytesReceived,bytesReceived.Length,0);rn page = page + Encoding.ASCII.GetString(bytesReceived, 0, bytes);rn rn Console.WriteLine("\n");rn Console.WriteLine(bytes); rn return page;rn rnrn private static void SocketSendData(Socket s)rn rn String str = Console.ReadLine();rn Byte[] bytesSent = Encoding.ASCII.GetBytes(str);rn s.Send(bytesSent, bytesSent.Length, 0);rnrn rn private static string SocketReceiveData(Socket s)rn rnrn // Receive the server home page content.rn Byte[] bytesReceived = new Byte[256];rn Int32 bytes = 0;rn string recvStr = "";rnrn // The following will block until te page is transmitted.rn bytes = s.Receive(bytesReceived, bytesReceived.Length, 0);rn recvStr = recvStr + Encoding.ASCII.GetString(bytesReceived, 0, bytes);rn while (s.Available > 0)rn rn bytes = s.Receive(bytesReceived, bytesReceived.Length, 0);rn recvStr = recvStr + Encoding.ASCII.GetString(bytesReceived, 0, bytes);rn rn Console.WriteLine("\n");rn Console.WriteLine(bytes);rn return recvStr;rn rnrn public static void Main()rn rn tryrn rn string host;rn int port = 8001;rn host = "192.168.1.212";rn string result = SocketSendReceive(host, port); rn Console.WriteLine(result);rn Console.WriteLine("\n---------------");rnrn Console.WriteLine("\n第二次发送数据\n");rn SocketSendData(serverSocket);rn Console.WriteLine("\n第二次发送完毕!\n");rn Console.WriteLine("\n---------------");rnrn Console.WriteLine("\n第二次接收数据\n");rn Console.WriteLine(SocketReceiveData(serverSocket));rn Console.WriteLine("\n第二次接收完毕!\n");rn Console.WriteLine("\n---------------");rn String str = Console.ReadLine();rn serverSocket.Close();rn rn catch (Exception e)rn rn Console.WriteLine("Error..... " + e.StackTrace);rn rn rn rn
Socket 通信接收到的数据不正确
最近做了一个socket客户端,用于接收WiFi模块发出的数据。rn 一帧数据:55090102030405060708090A0B0C4E0AAA。WiFi模块一直循环发送这一帧数据,一直不停歇。rn 客户端接收数据:rn byte buffer[17];rn m_Client.Receive(buffer,17);rn 接收的数据最开始一万帧左右是没有问题的,但是到后面每隔1000帧左右出现如下问题:rn 接收到的数据变为:55090102030405060405060708090AA55。中间少了一部分数据。rn 请教一下这种情况是什么地方出现问题?rn rn rn
急,用socket,接收到的数据不对?
server方代码rnpublic class Server1 rnrn private ServerSocket ss;rn public static final int DAYTIME_PORT = 13;rnrn public static void main(String args[]) throws IOException rn rn Server1 server = new Server1();rn server.go();rn rnrn public void go() throws IOException rn rn Socket s = null;rn ss = new ServerSocket(DAYTIME_PORT, 5); rn for (;;) rn s = ss.accept();rn BufferedWriter out = new BufferedWriter(rn new OutputStreamWriter(s.getOutputStream()));rn //System.out.println("dddd");rn out.write("Current time from server:" +rn (new Date()).toString() + "\n");rn out.close();rn s.close();rn rn rnrnrn客户端代码rnpublic class clientTest rn rn /** Creates a new instance of clientTest */rn public clientTest(String host) rn this.host = host;rn rn public static final int DAYTIME_PORT = 13;rn String host;rn Socket s;rnrn public static void main(String args[]) throws IOException rn rn clientTest client = new clientTest("localhost");rn client.go();rn rnrnrn public void go() throws IOException rn rn s = new Socket(host, DAYTIME_PORT);rn BufferedReader i=new BufferedReader(rn new InputStreamReader(s.getInputStream()));rn rn System.out.println(i.read());rn i.close();rn rn s.close();rn rnrnrn客户端收到是:67。用socket,接收到的数据不对?为什么?
Socket中提取接收到的数据代码
网络的相关知识,网络程序的编写,Socket是连接应用程序与网络驱动程序的桥梁,Socket在应用程序中创建,通过bind与驱动程序建立关系。此后,应用程序送给Socket的数据,由Socket交给驱动程序向网络上发送出去。计算机从网络上收到与该Socket绑定的IP+Port相关的数据后,由驱动程序交给Socket,应用程序便可从该Socket中提取接收到的数据。网络应用程序就是这样通过socket进行数据的发送与接收的。TCP与UDP的工作原理与编写过程,如何在程序中链接库文件。一个字符界面的聊天程序。
如何得到Socket收到数据的长度
我要从Socket中取出数据并放入到 byte[] 中 ,收到的数据并不是字符串rnrn如果使用byte[] buf=null; 来定义数组,就不能使用 socket.getInputStream().read(buf); rnrn非得使用byte[] buf=new byte[1000]; 来事先定义长度,可这样后面就全是0了,长度不好控制,很是郁闷。
串口接收到的数据为什么和模拟器发送的数据不一致呢?
用一个模拟器模拟一串数据作为发送端,另外一端接收,可是出现了奇怪的问题,接收到的和发送的为什么不一样呢?rn发送端:rn44 30 31 0D 41 56 55 0D 20 32 33 33 0D rn接收端:rn44 30 b1 8d 41 56 55 8d a0 b2 33 33 8d rn rn为什么把0D转换为了8d,把20转换为20,32变成了b2?rn串口是用1200,e,7,1rnrn百思不得其解,难道是串口模拟器的问题,还是接收的时候出了问题.rnrn请指教!
Socket.Receive接收到数据
为什么Socket.Receive接收到的数据不完成后半部分都是空的?rn客户端:rn_nws是一个NetworkStream对象 sendText是发送内容rn _nws.Write(Encoding.Unicode.GetBytes(sendTxt), 0, Encoding.Unicode.GetBytes(sendTxt).Length);rn服务器端: byte[] _packetBuff = new byte[_maxPacket];rn int i=clientSkt.Receive(_packetBuff);rnstring Content = Encoding.Unicode.GetString(_packetBuff,0,i);//Content比sendTxt少了一大截rnrn补充:通过测试i=Encoding.Unicode.GetBytes(sendTxt).Lengthrn急求!!!各位帮帮忙
接收到数据异常
用阻塞模式socket来读取wifi发送到路由器的数据,数据的格式是:头-数据-尾的格式。但是有些数据会串行,比如说:上一组数据(部分)-尾-头-这次数据(部分)的格式,请问这可能是什么原因?
如何接收到数据?
有一个微机械陀螺,波特率是230400.它的数据通过串口出来,经串口转usb转换器转成usb连接到计算机的usb口。现在要接收它的数据并进行处理。需要用什么来编程呢?是串口呢还是usb接口呢?rn另外,我用是Vc串口里的Com控件,结果接收不到数据,是怎么回事呢?rn谢谢各位的解答!
TCP为什么接收到的数据大于发送的数据长度?
发送端发送500*1024字节的数据,在运行了几个小时都是正常的,突然发现一次接收到的数据是538656rn下面是我的发送和接收代码,请各位大侠帮忙分析下。看看有无错误rnrn[code=C/C++]//发送rnwhile(1)rnrnrn sleep(200);rn int i=send(m_SockClient,pvar,500*1024,0);rn if(i == SOCKET_ERROR)rn rn CString error;rn error.Format("error : %d",WSAGetLastError());rn AfxMessageBox(error);rn rn rnrnrn//接收rnwhile(1)rnrn int num = 0;rn while(num < 500*1024)rn rn int ret = recv(m_SockClient,pRecvBuf + num ,500*1024,0);rn if(ret>=0)rn num += ret;rn elsern rn CString error;rn error.Format("socket error : %d",WSAGetLastError());rn AfxMessageBox(error);rn rn [/code]rn [color=#FF0000]rn //在这里加日志记录num 在运行了几个小时候,发现接收到的数据大于发送的数据num = 538656rn[/color]
TCPIP通讯 求接收到数据包的长度
我想把接收到的数据包全部放到我自己定义的一个缓冲数组a[256]中,例如像这样a[0]=b[0];a[1]=b[1];……(b[]为接收到数据包中的数组),所以我想要确定这个接收到数据包中字节的长度,或者是a[i]=b[i]中这个i的最大值是多少?(接收到的数据包解帧后是一个数 一个数的形式存在的)求高手指点下,我是新手,谢谢。
Linux Socket绑定的端口号和实际端口号不一致
在编程时候出现了,实际绑定端口号和给定端口号不同。是因为端口号赋值出了问题。 addr.sin_port = htons(port);//之前是 addr.sin_port = port; 新指令:netstat -tln显示所有端口号的连接情况
怎么获取接收到的UDP信息的长度?
使用UDP协议,现在接收到一段数据。rn我怎样获取这段数据的长度?rn我想根据这个长度动态申请内存,然后存入接收到的数据。
VC++显示接收到的数据
用结构体,如何把从串口接收到的数据拆分后显示到列表控件(List Contrl)里,请高手能给出原代码,谢谢,对于你们这些都很简单,可对于我这个新手就不简单了,总是写不明白,希望能得到高手的帮助,问题解决马上给分
如何分析接收到的数据
本人有一个数据包结构rntype TStControlProxyNew = packed recordrn StartCode : array[0..5] of Char;rn MessageType: Word;rn SubType : Word;rn MsgID : Word;rn MsgDataNum : Word;rn ByData : array[0..MAX_CONTROL_DATA_PROXY_SIZE - 1] of Char;rn EndCode : array[0..5] of Char;rn end;rn在这个回调函数中解析数据包rnfunction TForm1.SaveToDB(const AServerInfo: TServerInfo;rn const Msg: TStControlProxyNew): Boolean;//解释Msg,再把解析后的结果写入数据库rnbeginrn LbLog.Items.Add(Format('WSN设备的状态%d',[Msg.ByData[0]]));rn Result := False;rnend;rn跟踪到Msg.ByData(#3,#0,L,#0,#0,#0,#0..........)实际应该得到03,0L。rn遇到的困难是数据显示不出来,求教如何解析rn
组播无法接收到数据
使用MulticastSocket加入组播组,但是没有收到组播数据rn已经设置了TTL
js 处理接收到的数据
js 处理接收到的数据 [{},{}] 对的我,我们遇到服务器端发送过来的数据,第一时间可能想到的是JSON数据解析,对不对。然而我今天遇到一件麻烦的事情。本来接口文档说的好好的,只发送形如[{name:xiaoming,age:18,fav:{f1:game,f2:book}},{name:xiaohong,age:20,fav:{f1:music,f2:book}}],即[{},{}]的JSON数据。然而,当我信
接收到的数据为什么不全?
两台机器通过GPRS无线连接。A机器中发送如下一组数据:rn char buff[9]; rn buff[0]=0x01;rn buff[1]=0x03;rn buff[2]=0x07;rn buff[3]=0x9F;rn buff[4]=0x00; rn buff[5]=0x02; rn buff[6]=0xF5;rn buff[7]=0x51; rn buff[8]='\0'; rnB机器中用串口调试助手接收数据,结果发现接收显示如下:rn01 03 07 9F rn后面的几个数据没有接收到,如果将buff[4]=0x00 修改为 buff[4]=0x07,结果就能全部收到。 请问这是什么原因?
如何显示接收到的数据
我用WINSOCK控件接收了一组二进制数据放在s()变量里,可是我怎么把它以16进制形式显示在文本框里?
串口接收到的数据不正确
我用串口调试助手发00 01 02 03,但接收到的是A0 B0 A4 C0等一些乱码,请教各位大侠!!rnrn我的程序是C写的,用keil编译rnrn#include rn#define uint unsigned intrn#define uchar unsigned charrnrnuint i=0;rnuchar data astring[10];rnrnvoid main()rnrn TMOD=0x20; //初始化串口rn TL1=0xfd;rn TH1=0xfd;rn SCON=0xd8;rn PCON=0x80 ;rn TR1=1;rnrn for(i=0;i<10;i++) //接收数据rn rn while(RI==0);rn RI=0; rn astring[i]=SBUF; rn rnrn for(i=0;i<10;i++) //发送数据rn rn SBUF=astring[i];rn while(TI==0);rn TI=0;rn rn TR1=0;rnrnrnrn
从com1接收到数据
从com1接收到的数据放入char[]rn如何以16进制显示char[]中的数据?
关于接收到的数据的处理问题
例:如果我接收到是数据是 B1 02 03 AA BB 4A 13 32 01 00 00 00 01 01 9B 77rn数据存放在inbuff[16]数组里面,inbuff[3]等于AA是我接收到的整数部分,inbuff[4]等于BB是我接收到的小数部分,我想将它转换为10进制显示出来显示结果为170.187,有什么方法能实现此操作
C#的TCPClient怎样获取接收到的数据长度?
reader = new BinaryReader(networkStream);rnrn我给服务器发送了数据后,服务器会回复相应的数据,但是找不到reader哪个方法是用于获取接收数据的长度的。。[img=https://forum.csdn.net/PointForum/ui/scripts/csdn/Plugin/003/monkey/15.gif][/img]
indy10 TCPServer 怎么获取接收到的数据长度
用AContext->Connection->Socket->ReadBytes(Buf,Length,false);读取数据rnLength用哪个属性获取啊?rn
linux 下 select 大于0时,接收到的数据长度为0.
情况如题目.rnrnlinux 下 select 大于0时,接收到的数据长度为0.rn此函数运行的地方如下:rnlinux(裁剪过的),多线程中,运用select,设置其为最后参数为NULL(无限等),rn当其返回值大于0后,也通过FD_ISSET的判断,read接收数据,接收到的数据长度rn为0.rnrn有谁遇到过此问题,或者可解释此问题.rn在线等.
问题解决1@hdfs实际数据和备份数据不一致
Fsck检查HDFS,发现副本缺失; hadoop fsck / | grep replicated | grepTarget |awk -F ":" '{print $1}' |xargs hadoop fs -setrep -R 3
socket接收到的文件,没有内容
刚刚学习socket,从网上找了个实例。自己尝试了下:rn通讯连接正常。字符串发送正常。但是,循环发送文件包的时候。文件是生成了,大小也没错。就是内容都是空格,没有数据rn大家帮我分析下,这个是什麽原因:rn发送代码:[code=C#]rn FileInfo EzoneFile = new FileInfo(strFilePath);rn FileStream fs = EzoneFile.OpenRead();rn byte[] data = new byte[fs.Length];rn fs.Read(data, 0, data.Length);rn PacketCount = (int)(fs.Length / ((long)PacketSize));rn LastDataPacket = (int)(fs.Length - ((long)PacketSize * PacketCount));rnrn TransferFiles.SendVarData(sendClientSocket, Encoding.Unicode.GetBytes(fs.Name));rn TransferFiles.SendVarData(sendClientSocket,Encoding.Unicode.GetBytes(PacketSize.ToString()));rn TransferFiles.SendVarData(sendClientSocket, Encoding.Unicode.GetBytes(PacketCount.ToString()));rn TransferFiles.SendVarData(sendClientSocket, Encoding.Unicode.GetBytes(LastDataPacket.ToString()));rn byte[] packetByte = new byte[PacketSize];rn for (int s = 0; s < PacketCount; s++)rn rn fs.Read(packetByte, 0, packetByte.Length);rn TransferFiles.SendVarData(sendClientSocket, packetByte);rn rn if (LastDataPacket != 0)rn rn packetByte = new byte[LastDataPacket];rn fs.Read(packetByte, 0, packetByte.Length);rn TransferFiles.SendVarData(sendClientSocket, packetByte);rn rn fs.Close();rn sendClientSocket.Close();[/code]rn接收代码:rn[code=C#]rn SendFileName = Encoding.Unicode.GetString(TransferFiles.ReceiveVarData(send));rn strLocalFileFullName = strLocalPath + SendFileName;rn bagSize = Encoding.Unicode.GetString(TransferFiles.ReceiveVarData(send));rn bagCount = int.Parse(Encoding.Unicode.GetString(TransferFiles.ReceiveVarData(send)));rn baglast = Encoding.Unicode.GetString(TransferFiles.ReceiveVarData(send));rn FileStream sctFileStream = new FileStream(strLocalFileFullName, FileMode.Create, FileAccess.Write);rn int SendedCount = 0;rn while (true)rn rn byte[] data = TransferFiles.ReceiveVarData(send);rn if (data.Length != 0)rn rn sctFileStream.Write(data, 0, data.Length);rn SendedCount++;rn rn elsern rn break;rn rn rn sctFileStream.Close();rn send.Close();rn[/code]rnrn公共类rnpublic static int SendVarData(Socket s, byte[] data)rn rn int total = 0;rn int size = data.Length;rn int dataleft = size;rn int sent;rn byte[] datasize = new byte[4];rn datasize = BitConverter.GetBytes(size);rn sent = s.Send(datasize);rnrn while (total < size)rn rn sent = s.Send(data, total, dataleft, SocketFlags.None);rn total += sent;rn dataleft -= sent;rn rnrn return total;rn rnrn public static byte[] ReceiveVarData(Socket s)rn rn int total = 0;rn int recv;rn byte[] datasize = new byte[4];rn recv = s.Receive(datasize, 0, 4, SocketFlags.None);rn int size = BitConverter.ToInt32(datasize, 0);rn int dataleft = size;rn byte[] data = new byte[size];rn while (total < size)rn rn recv = s.Receive(data, total, dataleft, SocketFlags.None);rn if (recv == 0)rn rn data = null;rn break;rn rn total += recv;rn dataleft -= recv;rn rn return data;rn rn
c# socket tcp 接收到的内容乱了
[img=https://forum.csdn.net/PointForum/ui/scripts/csdn/Plugin/001/face/9.gif][/img]实在找不出bug,只好来求助大佬们了。rnrn情况是这样的,我的服务器每天大约能收到好几个内容错了的包,这几个包错得都很有规律。rnrn比如客户端发送过来的内容为AAAABBBBCCCCDDDD 结果如下代码接收到的内容表现为AAAACCCCCCCCDDDDrnrn也就是有4个字符不见了,而且必然多出4个字符,多出来的4个字符是从原本的内容中拷贝的,且紧靠被拷贝字符的位置。rnrn我在本地服务器中进行了测试,然而不知出于什么原因,本地服务器一直接收到完整的包,并没有进入包头不全和包体不全的情况。rnrn客户端发送速度为0.03秒一个包,大约进行了30万次发送,所有的包客户端都能正常收到。rnrn我测试时是使用本地服务器与客户端。在同一台大脑内。rnrn我的包头固定4个字符。rnrnrnvoid CheckPackage()rn rn if (isClose) return;rn int length = 0;rn isLost = false;rn while (length < recieveLength)rn rn //包头不全rn if (length + 4 > recieveLength)rn rn Tool.Debug.LogWarning("包头不全");rn ContinueRecieve(length, recieveLength - length);rn return;rn rnrn //获取包头rn int packageL = BitConverter.ToInt32(recive, length);rnrn //异常包体rn if (packageL > 8192) Tool.Debug.LogWarning("[异常错误]" + "数据包长度为" + packageL.ToString()); break; rnrn int need = length + 4 + packageL;rnrn //包体信息不全rn if (recieveLength < need)rn rn Tool.Debug.LogWarning("包体信息不全");rn ContinueRecieve(length, recieveLength - length);rn return;rn rnrn length += 4;rnrn //心跳rn if (packageL == 0)rn rn if (returnHeatBeat) sendQueue.Enqueue(new byte[] 0, 0, 0, 0 ); Send(); rn rn elsern rn byte[] buff = new byte[packageL];rn for (int i = 0; i < buff.Length; i++)rn rn buff[i] = recive[i + length];rn rn NetMessageManager.Instance.AddBuff(socket.RemoteEndPoint, buff, id);rn rn length += packageL;rn ;rnrn ContinueRecieve(0, 0);rn rnrn void ContinueRecieve(int copyStart, int copyCount)rn rn for (int i = 0; i < copyCount; i++)rn recive[i] = recive[copyStart + i];rn recieveLength = copyCount;rn SocketError error3;rn socket.BeginReceive(recive, copyCount, recive.Length - copyCount, SocketFlags.None, out error3, EndRecive, this);rn
Socket如何判断接收到的内容
如题。。。rn我写一个SDK的程序。通过api的socketrn我想通过收到的数据内容来判断要执行的操作。。。rn可是总是无法识别接收的内容rn我的接收端程序代码如下rn[code=C/C++]rn listen(sockSrv,5);rnrn SOCKADDR_IN addrClient;rn int len=sizeof(SOCKADDR);rn char recvBuf[50];rnwhile(true)rnrn SOCKET sockConn=accept(sockSrv,(SOCKADDR*)&addrClient,&len);rn while(true)rn rn int recvid=recv(sockConn,(char *)recvBuf,sizeof(recvBuf),0);rn if(SOCKET_ERROR!=recvid)rn rn/*这里我想加入下面的代码,来实现判断操作,可是总是无法识别,是因为数据类型的原因。还是什么?为啥switch部分代码都被掠过,直接就显示“对方发送消息:action1”这样的,求达人解答rnswitch(recvBuf)rnrncase "action1":rn printf("action1");rn break;rncase "action2":rn printf("action2");rn break;rnrnrn*/rn printf("对方发送消息:%s\n",recvBuf);rn recvBuf[0]='\0';rn continue;rn rn elsern rn printf("离开\n");rn break;rn rn rn[/code]
python socket怎样保存接收到的图片
利用java socket发送图片,python的socket负责接收,接收到之后是一个很长字符串,无法保存成文件,请问怎么才能把他保存成文件格式
如何处理socket接收到的NULL
msg_len = recv(client, ch_data_recv, MAX_BUFFER, 0);rnrn if(msg_len > 0) rn rn char *recv_buf = new char [MAX_BUFFER];rn memcpy( recv_buf, ch_data_recv, msg_len);rn// .....rnrn因为接收的数据有NULL,第一个也是NULL,我想把数据copy到recv_buf,好做别的操作;rn但是现在recv_buf里面死活都是NULL,里面非NULL的数据都没有了,rnrn怎么办?
socket 接收到数据后,能不能产生消息
socket 接收到数据后,能不能产生消息?如何去得到这个消息,什么函数可以实现?不用CSocket,只能用win API;请大家多多指点!
socket如何接收到四位十六进制的数据,再转成十进制
varrn len:int;rnbeginrn Socket.ReceiveBuf(len,4);rnend;rnrn我上面那样写Socket.ReceiveBuf(len,4);对不对呢,客户端传来的是四位的十六进制,我那样len得到值会不会直接转成十进制
请教关于按字节读取socket接收到的数据
请问如何按字节读取socket接收到的数据rnansistring和byte类型怎么转换?rnrn
相关热词 c# stream 复制 android c# c#监测窗口句柄 c# md5 引用 c# 判断tabtip 自己写个浏览器程序c# c# 字符串变成整数数组 c#语言编程写出一个方法 c# 转盘抽奖 c#选中treeview