socket必须在客户端断开连接之后,服务器端才能接收到数据解决方案
发布时间:2010-05-30 10:20:00 文章来源:www.iduyao.cn 采编人员:星星草
socket必须在客户端断开连接之后,服务器端才能接收到数据
android手机为服务器端,PC端软件为客户端
PC客户端通过socket发送数据给服务器端,服务器端一直接收不到数据,只有当PC客户端断开socket连接之后,
手机服务器端才接收到数据,请问是怎么回事?怎么处理,谢谢
代码如下:
android 手机端linux(server)
int make_server_socket()
{
int sockfd = socket(PF_INET, SOCK_STREAM, 0);
struct sockaddr_in my_addr;
memset(&my_addr, 0, sizeof(my_addr));
my_addr.sin_family = AF_INET;
my_addr.sin_port = htons(LISTENPORT);
my_addr.sin_addr.s_addr = INADDR_ANY;
if(sockfd>0)
{
int on = 1;
setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, &on, sizeof(on));
if(bind(sockfd, (struct sockaddr *)&my_addr, sizeof(struct sockaddr))==0)
{
if(listen(sockfd, 0)==0)
{
// No error
}
else
{
close(sockfd);
sockfd = -3;
}
}
else
{
close(sockfd);
sockfd = -2;
}
}
return sockfd;
}
int accept_socket(int sockfd)
{
// Block until connections
struct sockaddr_in peer_addr;
unsigned int sin_size = sizeof(peer_addr);
int new_fd = accept(sockfd, (struct sockaddr *)&peer_addr, &sin_size);
return new_fd;
}
int recv_socket(int sockfd, void* buffer, int size)
{
int received = 0;
while (buffer && received < size)
{
int result = recv(sockfd, buffer + received, size - received, MSG_NOSIGNAL);
if (result > 0)
{
received += result;
}
else
{
received = result;
break;
}
}
return received;
}
.............
while (1)
{
listenfd = make_server_socket();
memset(receive_buffer,0,sizeof(receive_buffer));
if (listenfd > 0)
{
while (1)
{
tcpipfd = accept_socket(listenfd);
if (tcpipfd > 0)
{
len=recv_socket(tcpipfd, recmsg, BUF_LEN_1024);
}
else
{
break;
}
sleep(1);
}
close_socket(listenfd);
}
sleep(2);
}
............
java客户端:
byte[] bs = new byte[] { (byte) 127, (byte) 0, 0, 1 };
InetAddress addr = InetAddress.getByAddress(bs);
pcsocket =new Socket(addr,port);
sender=new BufferedOutputStream(pcsocket.getOutputStream(),20);
receiver=new BufferedInputStream(pcsocket.getInputStream(),20);
sender.write(data.getBytes(),0,data.length());
sender.write('n');
sender.flush();
------解决方案--------------------
你这个是JAVA层的SOCKET通信?
友情提示:
信息收集于互联网,如果您发现错误或造成侵权,请及时通知本站更正或删除,具体联系方式见页面底部联系我们,谢谢。
其他相似内容:
-
Android版块严惩倒分行为,希望大家配合维持正当的技术交流 - 移动平台 / 非技术区
近期发现Android版块一些帐号在进行倒专家分操...
-
Java应用程序调用系统中任意一个so文件的方法 大家看看是否可行?
如果我想编写一个apk程序,而这个apk程序要调用系统中的非JNI的so...
-
关于ListView中CheckBox 用程序全选的问题
LisetView中view布局
XML code
<?xml version="1.0" encoding="UTF-8"?>
<RelativeLay...
-
请教一个关于广播接收器优先级的问题,为什么我无论如何都不能超越QQ,360,GO等手机助手,管家?
android官方好像说最高1000,我试过...
-
Android 布局framelayout到底怎么用
简单demo就不要说了哈,知道framelayout的简单实例,感觉没有收获,看了源码,也没有什么感觉。我想...
-
如果调用系统剪裁功能
首先调用系统图库,获取图片,然后对该图片进行剪裁,大家帮忙看下我的代码哪里有问题
Java code
Uri uri = data...
-
求4.0的framework.jar包
如题。哪位朋友有编好的4.0的framework.jar,给个下载地址,或发我邮箱heixue888@qq.com
3Q~
------解决方案...
-
关于读取手机通讯录的问题
使用Android1.5的读取方法:
Cursor cur = context.getContentResolver().query(Contacts.Peop...
-
请教如何用android画图
我想利用android写一个画图程序,请问我应该重点看android的哪些部分,请大家给点建议,还有大家是否有相关的工...
-
分享HTC手机Android源代码下载地址
http://developer.htc.com/
------解决方案--------------------
不错,可惜只有kernel的~~...