Java TCP 套接字 : data transfer is slow
全部标签 我正在尝试修改我当前的套接字程序以捕获混杂的数据包。我目前所拥有的是能够正常抓包的。我已经看到关于如何在Linux上执行此操作的其他答案,但我需要找到一种在Windows上完成此操作的方法。这是我的代码:intmain(intargc,charconst*argv[]){SOCKETs;//Theboundsocketstructsockaddr_inserver;intrecv_len;//Sizeofreceiveddatacharudpbuf[BUFLEN];//Abufferfortheincomingdata.floatdata;//Thedatainthepacket//C
拥有WindowsIOCP应用程序......................我了解对于异步i/o操作(在网络上),缓冲区必须在发送/读取操作期间保持有效。因此对于每个连接,我都有一个用于读取的缓冲区。对于发送,我使用缓冲区将要发送的数据复制到其中。发送操作完成后,我释放缓冲区以便可以重复使用。到目前为止还不错,不是什么大问题。尚不清楚的是你们是怎么做到的?另一件事是,即使以这种方式处理,我的意思是多缓冲区,接收端也可能会被数据淹没(根据经验)。即使将SO_RCVBUF设置为25MB也对我的测试没有帮助。所以我该怎么做?有待发送队列吗? 最佳答案
哪个套接字,clientSocket=accept()或listen(socket),您将sockoptSO_KEEPALIVE设置在哪个套接字上以使与客户端的连接不断开? 最佳答案 在每个接受的套接字上设置选项似乎是最可靠和可移植的。跨accept的非阻塞模式继承在不同实现之间是不一致的,SO_KEEPALIVE对监听套接字没有任何意义。 关于c-哪个套接字,clientSocket=accept()或listen(socket),你设置了sockoptSO_KEEPALIVE?,我们
我正在寻找有关Windows网络编程的信息。主要是如何获取单个可执行文件来应对1000个连接。我们在unix上使用select()FD_ISSET等,这工作起来非常快。在Windows上,这些API非常糟糕。FD_SET慢很多,但即使解决这个问题,Windows也比HPUX慢很多。我正在寻找一个win32API调用,我可以使用它来代替不需要太多CPU/时间的select()调用。目前我们将50%的时间(和CPU)花在select()上,而在unix上,花在send()和recv()上的时间是我所期望的。谢谢尼尔 最佳答案 您可能正在
我需要在单个进程中启动1000个客户端连接,我需要解决的关键限制是驱动程序不支持ConnectEx,因此我无法拥有纯IOCP解决方案。我的第一个想法是一个线程池来处理连接,其中每个句柄可以使用普通连接/选择语义处理多达64个连接,并且一旦连接就继续使用IOCP。但这行不通;一旦选择运行,我就不能向FD_SET添加另一个套接字。所以我必须将套接字设置为非阻塞并轮询它们。最好的解决方案可能是最简单的;每个线程一个连接客户端。假设我可以保持合理的连接速率,池中的线程数可能会很小。这是一个奇怪的情况,理想情况下,驱动程序会支持ConnectEx,但它(目前)不支持,我需要以尽可能最好的方式解决
我需要使用HTTP协议(protocol)发送文件,但问题是我是否应该使用套接字,因为我有大文件?或者我可以使用WinHttpApi,例如:BOOLHttpSendRequest(__inHINTERNEThRequest,__inLPCTSTRlpszHeaders,__inDWORDdwHeadersLength,__inLPVOIDlpOptional,__inDWORDdwOptionalLength);并为我想要的文件使用lpOptional?我应该划分文件还是该API处理大文件?如果我使用HTTPapi,文件大小是否有任何限制,我应该分配数据吗?
这是我从microsoft中获取的服务器代码.下面是我的main,它需要运行voidimportant_code(bool);。在linux和windows上使用管道和套接字时,我总是遇到这个问题。我如何退出select()我什么时候想退出我的应用程序?假设important_code总是在套接字代码之后的同一个线程上执行。我该怎么做?我知道这是windows代码,但我在linux下也遇到了这个问题额外的测试代码:如果您在我的主函数中注释掉main2()并取消注释循环,您可以使用ctrl+c干净地退出。使用套接字代码,阻塞select阻止我这样做。我该如何解决这个问题?#pragmac
我目前正在使用winsock构建服务器。我的服务器将处理多个客户端,因此我使用select()函数以及读取、写入和异常集。我已经知道如果特定套接字超时,select()返回0。但是我如何识别超时的实际套接字?顺便说一句,谁能告诉我Some_Socket需要发生什么才能使FD_ISSET(Some_Socket,&Exception)返回true?也许我可以使用上面的函数来检查集合中的每个套接字?编辑:假设我有这个例子:intmain(void){fd_setrfds;structtimevaltv;intretval;/*Watchstdin(fd0)toseewhenithasinp
我使用多线程开发了一个单服务器多客户端udp应用程序。我现在想切换到单处理器系统,这样多线程就不再帮我了:(现在我想使用异步套接字来实现服务器,这样它就可以同时处理多个客户端。这种方法行得通吗?如果要使用一台服务器处理多个客户端,使用异步套接字是否正确?使用异步套接字是否比使用线程处理多个客户端更好? 最佳答案 我建议您看一下libevent:http://www.libevent.org/它提供了组织异步服务器的所有必要功能。 关于c-使用异步套接字让服务器处理多个客户端,我们在Sta
我已经通读了这篇对python套接字的介绍:http://docs.python.org/3.3/howto/sockets.html这是我的服务器importsocketserversocket=socket.socket(socket.AF_INET,socket.SOCK_STREAM)serversocket.bind(("localhost",8000))serversocket.listen(5)whileTrue:(client,addr)=serversocket.accept()data=serversocket.recv(1024)print(data.decode