为什么我用socket recv乱码函数接收的数据会出现乱码

recv函数达到了最大接收字节数,重复读入问题_百度知道
recv函数达到了最大接收字节数,重复读入问题
大多情况下就是还有数据没有读到。怎么没读到的数据处理呢?
是写个循环 通过判断recv返回值和第三个参数是否相等而决定是否重复recv 还是等下次?
(用epoll,ET模式也就是说
当 recv返回值等于recv的第三个参数时
我有更好的答案
} memset使buffer为0&#47.data+len
第三个参数为MAX_LEN-len if (n&/;/handle data
并删除己处理data做多余数据的移动和修改buffer。。;读到无可读或错误为止
/&#47。。。。。。。。。。strct MSG_BUFFER {char data[MAX_LEN]。。while( 1){ n = recv数据到或returnif (=0) /&#47.len 达到指定长度或者分析出完整的包就处理)
&#47.len } 简单可以这样做。。
采纳率:53%
为您推荐:
其他类似问题
函数的相关知识
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。socket编程,recv接收到乱码?
20xialiangdancer]
编辑:www.fx114.net
本篇文章主要介绍了"socket编程,recv接收到乱码?
20xialiangdancer]",主要涉及到socket编程,recv接收到乱码?
20xialiangdancer]方面的内容,对于socket编程,recv接收到乱码?
20xialiangdancer]感兴趣的同学可以参考一下。
本帖最后由 VisualEleven 于
22:57:36 编辑
recv(client,msg,);
str.Format("%s",msg);
当客户端发的是中文时,str里面有乱码,请问怎么解决先看下传值的时候是不是对的引用&1&楼&&的回复:先看下传值的时候是不是对的
传其他英文是对的,我怀疑是字符编码的问题,但不知道怎么解决串后面加个结束符..
int&len&=&recv(client,msg,);
msg[len]&=&0;
str.Format("%s",msg);
这样试试...另外你的发送端是怎么写的?引用&4&楼&&的回复:另外你的发送端是怎么写的?
发送端是在IOS下开发的,发送端发送sql语句给服务器,服务器就把sql语句插入数据库。
sql语句是用的&dataUsingEncoding:NSUTF8StringEncoding转换成NSData,再发送引用&5&楼&&的回复:引用&4&楼&&的回复:
另外你的发送端是怎么写的?
发送端是在IOS下开发的,发送端发送sql语句给服务器,服务器就把sql语句插入数据库。
sql语句是用的&dataUsingEncoding:NSUTF8StringEncoding转换成NSData,再发送
按照你的描述,应该是编码的问题了,我查到的IOS的默认编码是UTF-8,你接收端的编码是ascall编码,进行编码转换即可引用&6&楼&&的回复:引用&5&楼&&的回复:
引用&4&楼&&的回复:
另外你的发送端是怎么写的?
发送端是在IOS下开发的,发送端发送sql语句给服务器,服务器就把sql语句插入数据库。
sql语句是用的&dataUsingEncoding:NSUTF8StringEncoding转换成NSData,再发送
按照你的描述,应该是编码的问题了,我查到的IOS的默认编码是UTF-8,你接收端……
就是不知道怎么转换,我用了好几个函数都还是不行,请问您知道怎么转换不?我用了MultiByteToWideChar和
A2W宏也不行first&&&convert&&&UTF-8&&&to&&&widechar,&&&then&&&convert&&&widechar&&&to&&&ANSI.&
here&&&is&&&code&&&snippets&&&converting&&&ANSI&&&to&&&UTF-8&
CString&&&aaa=&"abc&";//CP_ACP&&&CP_UTF8&
wchar_t&&&wbuf[128];&
ZeroMemory(wbuf,sizeof(wbuf));&
int&&&nret=MultiByteToWideChar(CP_ACP,0,aaa,aaa.GetLength()+1,wbuf,sizeof(wbuf)/sizeof(wbuf[0]));&
if(nret&&0&&nret&&sizeof(wbuf))&
foutput.Open(&"c:\\widechar.htm&",CFile::modeCreate|CFile::modeWrite);&
foutput.Write(wbuf,nret*2);&
foutput.Flush();&
foutput.Close();&
char&&&uft8buf[1024];&
BOOL&&&busedefault=&
nret&&&=&&&WideCharToMultiByte(CP_UTF8,0,wbuf,nret,uft8buf,sizeof(uft8buf),NULL,NULL);&
if(nret&&0&&nret&&sizeof(uft8buf))&
foutput.Open(&"c:\\utf8.htm&",CFile::modeCreate|CFile::modeWrite);&
foutput.Write(uft8buf,nret);&
foutput.Flush();&
foutput.Close();&
}&已经解决了,非常感谢!引用&9&楼&&的回复:已经解决了,非常感谢!怎么解决的,可否分享一下。引用&9&楼&xialiangdancer&的回复:已经解决了,非常感谢!
引用&10&楼&yongleshangpu&的回复:[Quote=引用&9&楼&&的回复:]
已经解决了,非常感谢!怎么解决的,可否分享一下。
怎么解决的??我也需要引用&11&楼&dengmuwen&的回复:Quote: 引用&9&楼&xialiangdancer&的回复:
已经解决了,非常感谢!
引用&10&楼&yongleshangpu&的回复:[Quote=引用&9&楼&&的回复:]
已经解决了,非常感谢!怎么解决的,可否分享一下。
怎么解决的??我也需要
有谁解决了吗?分享下吧,帮助下后来人
一、不得利用本站危害国家安全、泄露国家秘密,不得侵犯国家社会集体的和公民的合法权益,不得利用本站制作、复制和传播不法有害信息!
二、互相尊重,对自己的言论和行为负责。
本文标题:
本页链接:博主最新文章
博主热门文章
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)package com.xu.
import java.io.IOE
import java.net.DatagramP
import java.net.DatagramS
import java.net.InetA
import java.net.SocketE
import java.net.UnknownHostE
import org.codehaus.jettison.json.JSONE
import org.codehaus.jettison.json.JSONO
//发送请求的代码
public class Snippet
public static void main(String[] args)
System.out.println("---------");
Snippet snippet = new Snippet();
snippet.Test();
public void Test()
//1、创建socket对象,通过DatagramSocket对象
DatagramSocket ds =
ds = new DatagramSocket();
} catch (SocketException e)
e.printStackTrace();
String serverIP = "";
String socketPort ="";
JSONObject jsonObject = new JSONObject();
/*jsonObject.put("type", "openDoor");
jsonObject.put("doorId", "1");
jsonObject.put("interval", "20");*/
jsonObject.put("type", "closeDoor");
jsonObject.put("doorId", "1");
jsonObject.put("interval", "20");
} catch (JSONException e1) {
e1.printStackTrace();
//2、确定数据,并封装成数据包
data = jsonObject.toString().getBytes();
DatagramPacket dp =
dp = new DatagramPacket(data, data.length, InetAddress.getByName("192.168.32.24"), 8086);
} catch (UnknownHostException e) {
e.printStackTrace();
//3、通过scoket服务,将已有的数据发送出去,通过send方法
System.out.println(" dp =
ds.send(dp);
} catch (IOException e)
e.printStackTrace();
ds.close();
}//接收数据
class AccZonePersonSaveThread extends Thread
public void run()
DatagramSocket ds =
System.out.println("---------");
ds = new DatagramSocket(8088);
catch (SocketException e1)
e1.printStackTrace();
while (true)
//2、定义数据包,用于存储数据
byte[] buf = new byte[1024];
DatagramPacket dp = new DatagramPacket(buf, buf.length);
//3、通过服务的receive方法,接收数据并存入数据包中
ds.receive(dp);
//4、通过数据包中的方法,获取其中的数据。
String ip = dp.getAddress().getHostAddress();
int port = dp.getPort();
String data = new String(dp.getData(),"GBK");
System.out.println("ip = " + ip + ": " + port + ":
" + data);
catch (SocketException e)
e.printStackTrace();
catch (IOException e)
e.printStackTrace();
}接收的时候加上 String data = new String(dp.getData(),"GBK");就可以了博主最新文章
博主热门文章
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)

我要回帖

更多关于 linux recv 函数 的文章

 

随机推荐