当前位置: 技术问答>linux和unix
linux 网络编程的几个小问题
来源: 互联网 发布时间:2016-08-01
本文导语: int PASCAL FAR send(SOCKET s, const char FAR *buf, int len, int flags); 对于这个函数,有几个不明白的地方 第一个是PASCAL FAR ,我查阅相关资料,大意是段跳转,数据或代码超过了64K,要访问这些数据就必须用远指针了,...
int PASCAL FAR send(SOCKET s, const char FAR *buf, int len, int flags);
对于这个函数,有几个不明白的地方
第一个是PASCAL FAR ,我查阅相关资料,大意是段跳转,数据或代码超过了64K,要访问这些数据就必须用远指针了,我记得好像是在计算机原理里面也有相关解释。可是我不明白这个地方为什么需要?
第二个,SOCKET s,是一个SOCKET标识。一个int 型数值。可以确定一个SOCKET即传输协议之类的。并不包含IP地址,为什么仅仅需要一个SOCKET就可以发送数据?
第三个,我觉得可能与第一个有关即len,发送数据的长度,应该与段有关。但我也不太明白,为什么需要它?当然如果真的与段有关,那就是容易理解多了。
或者说send函数的实现原理或者机制是什么
谢谢了
对于这个函数,有几个不明白的地方
第一个是PASCAL FAR ,我查阅相关资料,大意是段跳转,数据或代码超过了64K,要访问这些数据就必须用远指针了,我记得好像是在计算机原理里面也有相关解释。可是我不明白这个地方为什么需要?
第二个,SOCKET s,是一个SOCKET标识。一个int 型数值。可以确定一个SOCKET即传输协议之类的。并不包含IP地址,为什么仅仅需要一个SOCKET就可以发送数据?
第三个,我觉得可能与第一个有关即len,发送数据的长度,应该与段有关。但我也不太明白,为什么需要它?当然如果真的与段有关,那就是容易理解多了。
或者说send函数的实现原理或者机制是什么
谢谢了
|
不需要
因为你可能传的是二进制数据流
|
PASCAL FAR —— 好像是以前针对16位机器时设计的,为了使16位能够达到32位大的寻址操作等一些问题
SOCKET s —— socket是一种数据结构,封装了对应于网络的一些东西,让编程更容易
len —— 该选项让你知道缓冲区数据大小,可以在接收端分配空间以接收,要不缓冲区如果是二进制数据,那么接收端就不知道该分配多大的空间来接收数据了
SOCKET s —— socket是一种数据结构,封装了对应于网络的一些东西,让编程更容易
len —— 该选项让你知道缓冲区数据大小,可以在接收端分配空间以接收,要不缓冲区如果是二进制数据,那么接收端就不知道该分配多大的空间来接收数据了
|
int send(int sockfd,const void *msg,int len,int flags):函数这样定义可以啊!
msg:一个指针,指向你想发送数据的地址,不存在长度指定。
len:是你想发数据的长度。
函数返回的是它真正发送数据的长度!
send()发送数据可能小于len,
msg:一个指针,指向你想发送数据的地址,不存在长度指定。
len:是你想发数据的长度。
函数返回的是它真正发送数据的长度!
send()发送数据可能小于len,
|
int PASCAL FAR send(SOCKET s, const char FAR *buf, int len, int flags);
不知道你从哪弄来的原型定义
man手册里定义为
ssize_t send(int s, const void *buf, size_t len, int flags);
UNIX里一切都是文件
对硬件的操作也被封装成对文件的操作
SOCKET s就是一个打开的文件描述符,其实send、sendto和write都是可以互换是用的
len跟段没有关系
不过因为c语言传参,const void *buf仅是地址信息,没有长度信息,再加一个len来补充
不知道你从哪弄来的原型定义
man手册里定义为
ssize_t send(int s, const void *buf, size_t len, int flags);
UNIX里一切都是文件
对硬件的操作也被封装成对文件的操作
SOCKET s就是一个打开的文件描述符,其实send、sendto和write都是可以互换是用的
len跟段没有关系
不过因为c语言传参,const void *buf仅是地址信息,没有长度信息,再加一个len来补充