当前位置: 技术问答>linux和unix
在aix下写网络服务程序
来源: 互联网 发布时间:2016-09-27
本文导语: 服务器aix: 客户端windows 在服务器上写一个网络服务程序: 由于不分包,一个数据包很大,有什么好的办法? setsockopt(,,SO_RCVFBUF,32768); 可是还不够,10M会有问题吗? | TCP是字节流,不存在分包...
服务器aix:
客户端windows
在服务器上写一个网络服务程序:
由于不分包,一个数据包很大,有什么好的办法?
setsockopt(,,SO_RCVFBUF,32768);
可是还不够,10M会有问题吗?
客户端windows
在服务器上写一个网络服务程序:
由于不分包,一个数据包很大,有什么好的办法?
setsockopt(,,SO_RCVFBUF,32768);
可是还不够,10M会有问题吗?
|
TCP是字节流,不存在分包不分包的问题。
无论在发送端还是在接受端,都需要循环,保证所有的数据都发送完毕。
无论是write还是read函数,部分完成,所以需要一个循环。
http://www.cs.odu.edu/~cs779/stevens2nd/lib/writen.c
http://www.cs.odu.edu/~cs779/stevens2nd/lib/readn.c
无论在发送端还是在接受端,都需要循环,保证所有的数据都发送完毕。
无论是write还是read函数,部分完成,所以需要一个循环。
http://www.cs.odu.edu/~cs779/stevens2nd/lib/writen.c
http://www.cs.odu.edu/~cs779/stevens2nd/lib/readn.c
/* include writen */
#include "unp.h"
ssize_t /* Write "n" bytes to a descriptor. */
writen(int fd, const void *vptr, size_t n)
{
size_t nleft;
ssize_t nwritten;
const char *ptr;
ptr = vptr;
nleft = n;
while (nleft > 0) {
if ( (nwritten = write(fd, ptr, nleft)) 0) {
if ( (nread = read(fd, ptr, nleft)) = 0 */
}
/* end readn */
ssize_t
Readn(int fd, void *ptr, size_t nbytes)
{
ssize_t n;
if ( (n = readn(fd, ptr, nbytes))