C++和android socket通信的一点问题

CoolEgos 2014-04-20 07:19:19
写了一个C++做server端,android做client端的小例子。但却一直发送的东西有问题。
server端:
WSADATA   wsaData;   
char buf[1024];
int nBytes=1024, recvbytes;
SOCKET Listening;
SOCKET NewConnection;
SOCKADDR_IN ServerAddr;
SOCKADDR_IN ClientAddr;
int ClientAddrLen=sizeof(ClientAddr);
int Port = 5050;
WSAStartup(MAKEWORD(2,2),&wsaData);
Listening = socket( AF_INET, SOCK_STREAM, IPPROTO_TCP );
ServerAddr.sin_family = AF_INET;
ServerAddr.sin_addr.s_addr = htonl(INADDR_ANY);
ServerAddr.sin_port = htons(Port);

bind( Listening, (SOCKADDR *)&ServerAddr, sizeof(ServerAddr) );
listen( Listening, 5 );
printf( "Wating accpet....\n" );

while(true) {
NewConnection = accept(Listening,(SOCKADDR *)&ClientAddr, &ClientAddrLen);
printf( "Wating recv.....\n" );
/////////////////////////////////////

//recv(NewConnection,buf,nBytes,0);
recv(NewConnection,buf,sizeof(buf),0);

printf("%s\n",buf);}


client端:
private TextView textview;
private Button send; //发送按钮
String result;
private OutputStream outputStream = null; //输出流
private InputStream inputStream = null; //输入流
private PrintWriter out = null; //输出

try{
Socket sock = new Socket("192.168.191.6", 5050);//改成自己的本地主机IP
System.out.println("连接成功!");
outputStream = sock.getOutputStream(); //得到输出流
inputStream = sock.getInputStream(); //得到输入流
out = new PrintWriter(outputStream,true);
}
catch(Exception e){
e.printStackTrace();
}

send.setOnClickListener(new OnClickListener(){

@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
out.println("HELLO");
//String str = "123456";
//byte []s = new byte[28];
//s = str.getBytes();
//out.write("HELLO");
//out.println(s);

}});

做的时候是点击发送按钮发送HELLO过去,但得到的结果有无问题。

求解释啊?
...全文
319 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
路人乙2019 2014-04-21
  • 打赏
  • 举报
回复
char buf[1024]={0};这样就行了。你只接受了五个字符,却多显示了1019个没有置0的字符。
CoolEgos 2014-04-21
  • 打赏
  • 举报
回复
引用 3 楼 oyljerry 的回复:
引用 2 楼 A38017032 的回复:
[quote=引用 1 楼 oyljerry 的回复:] 接受数组添加数据\0结尾
不对吧,发送的数据么?怎么加啊,接收方没收到信息的时候怎么知道收到信息的长度?
接收方没有消息,看网络返回错误信息[/quote]
out.println("HELLO");
可以收到消息,但是我根本不需要两行的换行空格
out.print("HELLO");
out.write("HELLO");
根本发不出去?不知道为什么?难道java和C++之间换行的编码不同?
oyljerry 2014-04-21
  • 打赏
  • 举报
回复
引用 2 楼 A38017032 的回复:
引用 1 楼 oyljerry 的回复:
接受数组添加数据\0结尾
不对吧,发送的数据么?怎么加啊,接收方没收到信息的时候怎么知道收到信息的长度?
接收方没有消息,看网络返回错误信息
路人乙2019 2014-04-21
  • 打赏
  • 举报
回复
引用 8 楼 A38017032 的回复:
[quote=引用 7 楼 zzdmfk 的回复:] memset(buf,0,sizeof(buf)); 你看看recv函数返回值,也就是收到的字节数是多少?
这个我知道了,还有为什么
out.println("HELLO");
out.print("HELLO")
一个可以将消息发出去一个发不出去[/quote]这个你得去java或android区请教。
CoolEgos 2014-04-21
  • 打赏
  • 举报
回复
引用 7 楼 zzdmfk 的回复:
memset(buf,0,sizeof(buf)); 你看看recv函数返回值,也就是收到的字节数是多少?
这个我知道了,还有为什么
out.println("HELLO");
out.print("HELLO")
一个可以将消息发出去一个发不出去
路人乙2019 2014-04-21
  • 打赏
  • 举报
回复
memset(buf,0,sizeof(buf)); 你看看recv函数返回值,也就是收到的字节数是多少?
CoolEgos 2014-04-21
  • 打赏
  • 举报
回复
引用 5 楼 zzdmfk 的回复:
char buf[1024]={0};这样就行了。你只接受了五个字符,却多显示了1019个没有置0的字符。
不是只有这个问题吧,我每次收消息之前都加了这句(后来加的)
memset(buf,'\0',sizeof(buf));
引用 4 楼 A38017032 的回复:
引用 3 楼 oyljerry 的回复:
[quote=引用 2 楼 A38017032 的回复:] [quote=引用 1 楼 oyljerry 的回复:] 接受数组添加数据\0结尾
不对吧,发送的数据么?怎么加啊,接收方没收到信息的时候怎么知道收到信息的长度?
接收方没有消息,看网络返回错误信息[/quote]
out.println("HELLO");
可以收到消息,但是我根本不需要两行的换行空格
out.print("HELLO");
out.write("HELLO");
根本发不出去?不知道为什么?难道java和C++之间换行的编码不同?[/quote]这里面的问题依旧存在啊?
CoolEgos 2014-04-20
  • 打赏
  • 举报
回复
引用 1 楼 oyljerry 的回复:
接受数组添加数据\0结尾
不对吧,发送的数据么?怎么加啊,接收方没收到信息的时候怎么知道收到信息的长度?
oyljerry 2014-04-20
  • 打赏
  • 举报
回复
接受数组添加数据\0结尾

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧