为什么要用socket用数据库不行吗

为什么要用socket用数据库不行吗,第1张

socket存取数据效率高。在应用层通过传输层进行数据通信时,socket存取数据效率要高于数据库,所以要用socket。socket指套接字。所谓套接字,就是对网络中不同主机上的应用进程之间进行双向通信的端点的抽象。

数据太大的话一般都会分包发送,TCP和UDP包都有最大的上限。如果服务器端收不到就不会执行的话要用TCP协议。

传输层:

对于UDP协议来说,整个包的最大长度为65535,其中包头长度是65535-20=65515;

对于TCP协议来说,整个包的最大长度是由最大传输大小(MSS,Maxitum Segment Size)决定,MSS就是TCP数据包每次能够传

输的最大数据分段。为了达到最佳的传输效能TCP协议在建立连接的时候通常要协商双方的MSS值,这个值TCP协议在实现的时候往往用MTU值代替(需

要减去IP数据包包头的大小20Bytes和TCP数据段的包头20Bytes)所以往往MSS为1460。通讯双方会根据双方提供的MSS值得最小值

确定为这次连接的最大MSS值。

IP层:

对于IP协议来说,IP包的大小由MTU决定(IP数据包长度就是MTU-28(包头长度)。 MTU值越大,封包就越大,理论上可增加传送速率,但

MTU值又不能设得太大,因为封包太大,传送时出现错误的机会大增。一般默认的设置,PPPoE连接的最高MTU值是1492, 而以太网

(Ethernet)的最高MTU值则是1500,而在Internet上,默认的MTU大小是576字节

TCP协议通信,接收方接收数据的前后次序与发送方一致,但数据包不一定一致。打个比方,发送方按顺序发送了2个数据包,接收可能仅接收1次就能全部收到,也可能需要收2次才能收到,也可能收3次,每次收到的数据大小不一定和发送方发送的数据包大小一样,但最终收到的总数据是一致的。

从你的程序来看,客户端连续发送2包数据,服务器端有可能一次就全部接到,也可能分2次收到,也可能会收2次以上才能收到。如果在发送“########helloworld”和“######whatisit”之间增加一些延时语句,比如延时1秒,那么可以肯定服务器端只能收到1次,因为在发送第1包数据的时候,服务器端就接收到一次数据,而在发送第2包数据时,服务器已经不再有接收动作了。

就现在的客户端程序来说,如果要在服务器端收到所有数据,可以考虑在服务器端循环接收数据,拼装数据,直到收不到数据为止,然后输出所有接收到的数据。

while(1)

{

int rr

sock_fd = accept( sock, NULL, NULL)

retval = 0

while(1)

{

rr = recv( sock_fd, buf1, MAX_BUFLEN, 0 )

if(rr==0) break

memcpy(buf+retval,buf1,rr)

retval+=rr

}

printf("buf= %s\n ##retval=%d\n",buf,retval)

write(sock_fd,"get the call\n",sizeof("get the call\n")-1)

}

可以试试看。仅供参考。

查到个函数ioctlsocket

while(1)

{ int rr

sock_fd = accept( sock, NULL, NULL)

retval = 0

int iMode = 1//0:阻塞

ioctlsocket(sock_fd,FIONBIO, (u_long FAR*) &iMode)//非阻塞设置

while(1) { ....... }

........

}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/6707057.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-03-27
下一篇 2023-03-27

发表评论

登录后才能评论

评论列表(0条)

保存