双11狂欢大促

盲盒赢 定制羽绒服

开启惊喜盲盒,抽取你的专属好礼

— 惊喜奖品抢先看 —

客户端断开socket之后,服务器端才能收到数据?

weige2501 weige2501 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
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();
...全文

相关推荐

完美解决spring websocket自动断开连接再创建引发的问题

问题:由于 web session 超时时间为 30 分钟,如用户在 web session 规定时间内没有退出系统,但由于其它原因 用户却断开的 websocket 的连接,如果用户还要聊天或是其它 websocket 方面的操作,那么就只能重新连接… 看代码: var socket; var $ = function() { return document.getElementById(arguments[0]); } var log = function(msg) { $("log")[removed] ? $("log")[removed] += "" + msg

weixin_38516956

Socket编程

socket编程,欢迎大家来学习

华丽的跌倒

Socket编程原理

面向连接的操作使用TCP协议.这个模式下的socket必须在发送数据之前与目的地的socket取得一个连接.一旦连接建立了,socket就可以使用一个流接口:打开-读-写-关闭.所有的发送的信息都会在另一端以同样的顺序被接收.面向连接的操作比无连接的操作效率低,但是数据的安全性更高. 无连接的操作使用数据报(UDP)协议.一个数据报是一个独立的单元,它包含了所有的这次投递的信息.把它想象成一个信封吧,它有目的地址和要发送的内容这个模式下的socket不需要连接一个目的地socket,它只是简单地投出数据报.无连接的操作是快速的和高效的,但是数据安全性不佳.

lichaomin_good

Socket服务器端断开后重新打开,客户端将自动完成链接

Socket通信技术。利用到了Thread技术,完成了,服务器开启,一直监听客户端功能,两点是,当服务器端断开后重新打开后,客户端能自动链接到服务器端,由于网络原因最多延迟2分钟

kanglujiushi

用Socket实现客户端和服务器端通信(完整版)

用Socket实现客户端和服务器端通信,调用方位于控件线程以外的线程

坏丫头
评论 2
收藏 已收藏
分享
返回顶部
weige2501
网络编程 18,356 成员 64,161 内容