Articles of 发送

通过套接字发送图片(发送func)在c + +,但不要收回完整(Windows)!

我正在从客户端发送数据到服务器,但图片没有收到完整。 客户代码: FILE *fr = fopen(tmppicsend, "rb"); char* buffer; buffer = (char*) malloc(sizeof(char)*size); fread(buffer, size, 1, fr); send_len_pic = send( m_socket_pic, buffer, size, 0 ); recv( m_socket_pic, rec_end_check, 32, 0 ); fclose(fr); free(buffer); 服务器代码: FILE *fw = fopen(fname, "wb"); char* buffer; buffer = (char*) malloc(sizeof(char)*size); int rec_len = recv( current_client, buffer, size, 0 ); buffer[size]='\0'; […]

发送很多后,我的send()调用导致我的程序完全停顿。 这怎么可能?

所以基本上我正在使用C ++运行在Linux上的MMO服务器。 它起初工作正常,但在50个客户端40秒后,它将完全停顿。 当我debugging它时,我发现基本上它停止响应之前的最后一帧是syscall(),在此时它消失在内核中。 一旦它消失到内核中,它甚至不会返回一个值…这完全是莫名其妙的。 50个客户端每250毫秒发送23个字节。 这23个字节然后被广播给所有其他49个客户端。 这个过程开始减慢,然后最终完全停止,内核永远不会从send()命令的系统调用中返回。 这里有什么可能的原因? 这真是让我疯狂! 我发现的一个选项是强制延迟的Naglesalgorithm。 我试过切换它,但它仍然发生。 编辑:程序卡在这里。 具体来说,在发送中,这又会调用syscall() bool EpollManager::s_send(int curFD, unsigned char buf[], int bufLen, int flag) // Meant to counteract partial sends { int sendRetVal = 0; int bytesSent = 0; while(bytesSent != bufLen) { print_buffer(buf, bufLen); sendRetVal = send(curFD, buf + bytesSent, bufLen – bytesSent, flag); […]

C,sendfile()和send()的区别?

sendfile()在内核空间中的两个文件描述符之间复制数据。 我在某处看到,如果你正在用C写一个web服务器,你应该使用send()和recv()来代替write()和read()。 那么send()也使用内核空间吗? 无论我用什么发送sendfile()或发送() – 在客户端我会使用recv()的权利? 另一方面, 手册页说:“send()和write(2)之间唯一的区别就是标志的存在,使用零标志参数,send()等价于write(2)。

Linux套接字:如何检测客户端程序中断开的networking?

我正在debugging基于Linux的套接字程序。 作为网站上提供的所有示例,我应用了以下结构: sockfd= socket(AF_INET, SOCK_STREAM, 0); connect(sockfd, (struct sockaddr *) &serv_addr, sizeof(serv_addr)); send_bytes = send(sockfd, sock_buff, (size_t)buff_bytes, MSG_DONTWAIT); 当删除服务器closures其服务器程序时,我可以检测到断开连接。 但是,如果我拔掉以太网电缆,发送function仍然返回正值而不是-1。 如何在客户端程序中检查networking连接,假设我无法更改服务器端?