linux send(Linux修改时间)
大家好,今天小编来为大家解答linux send这个问题,Linux修改时间很多人还不知道,现在让我们一起来看看吧!
socket linux c++ send()函数
给你一个代码,linux下编译运行即可,做了简单的注释,client.c如下:
send()函数在client.c末尾
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<errno.h>
#include<sys/types.h>
#include<sys/socket.h>
#include<netinet/in.h>
#defineMAXLINE4096//发送接受信息长度
#definePORT6666//端口
intmain(intargc,char**argv)
{
intsockfd,n;
charrecvline[MAXLINE],sendline[MAXLINE];
structsockaddr_inservaddr;
if(argc!=2){
printf("usage:./client<ipaddress>\n");//使用方法
exit(0);
}
if((sockfd=socket(AF_INET,SOCK_STREAM,0))<0){//创建套接字,并未连接
printf("createsocketerror:%s(errno:%d)\n",strerror(errno),errno);
exit(0);
}
//memset(结构体地址,清零,要清零的长度);清零结构体servaddr,将结构体数据全部设置为0
//同bzero(结构体地址,要清理的长度);默认清零
memset(&servaddr,0,sizeof(servaddr));
servaddr.sin_family=AF_INET;//sa_family是通信类型,最常用的值是"AF_INET"
servaddr.sin_port=htons(PORT);//端口号
//servaddr.sin_addr.s_addr=inet_addr(argv[1]);//服务器IP,如下功能相同
if(inet_pton(AF_INET,argv[1],&servaddr.sin_addr)<=0){
printf("inet_ptonerrorfor%s\n",argv[1]);
exit(0);
}
//连接服务器
if(connect(sockfd,(structsockaddr*)&servaddr,sizeof(servaddr))<0){
printf("connecterror:%s(errno:%d)\n",strerror(errno),errno);
exit(0);
}
printf("sendmsgtoserver:\n");
fgets(sendline,MAXLINE,stdin);//输入向服务器发送的信息
if(send(sockfd,sendline,strlen(sendline),0)<0)//向服务器发送信息
{
printf("sendmsgerror:%s(errno:%d)\n",strerror(errno),errno);
exit(0);
}
close(sockfd);//关闭套接字
exit(0);
}
服务器程序:server.c如下:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<errno.h>
#include<sys/types.h>
#include<sys/socket.h>
#include<netinet/in.h>
#defineMAXLINE4096
#definePORT6666
intmain(intargc,char**argv)
{
intlistenfd,connfd;
structsockaddr_inservaddr;
charbuff[MAXLINE];
intn;
if((listenfd=socket(AF_INET,SOCK_STREAM,0))==-1){//创建套接字
printf("createsocketerror:%s(errno:%d)\n",strerror(errno),errno);
exit(0);
}
memset(&servaddr,0,sizeof(servaddr));//结构体清零
servaddr.sin_family=AF_INET;//sa_family是通信类型,最常用的值是"AF_INET"
servaddr.sin_addr.s_addr=htonl(INADDR_ANY);//指定接受任何连接
servaddr.sin_port=htons(PORT);//监听端口
//给套接口绑定地址
if(bind(listenfd,(structsockaddr*)&servaddr,sizeof(servaddr))==-1){
printf("bindsocketerror:%s(errno:%d)\n",strerror(errno),errno);
exit(0);
}
if(listen(listenfd,10)==-1){//开始监听,最大请求数为10,可以自己设置
printf("listensocketerror:%s(errno:%d)\n",strerror(errno),errno);
exit(0);
}
printf("======waitingforclient'srequest======\n");
while(1){
//建立通信,等待客户端connect()函数的连接
if((connfd=accept(listenfd,(structsockaddr*)NULL,NULL))==-1)
{
printf("acceptsocketerror:%s(errno:%d)",strerror(errno),errno);
continue;
}
n=recv(connfd,buff,MAXLINE,0);//n可以判断错误,此处可直接用recv()函数
//接收到的信息存放在buff中
buff[n]='\0';//添加结束符
printf("recvmsgfromclient:%s\n",buff);
close(connfd);
}
close(listenfd);
}
linux下send命令是干什么用的
功能描述:
发送消息,send只可用于基于连接的套接字,send和 write唯一的不同点是标志的存在,当标志为0时,send等同于write。sendto和 sendmsg既可用于无连接的套接字,也可用于基于连接的套接字。除了套接字设置为非阻塞模式,调用将会阻塞直到数据被发送完。
用法:
#include<sys/types.h>
#include<sys/socket.h>
ssize_tsend(intsock,constvoid*buf,size_tlen,intflags);
ssize_tsendto(intsock,constvoid*buf,size_tlen,intflags,conststructsockaddr*to,socklen_ttolen);
ssize_tsendmsg(intsock,conststructmsghdr*msg,intflags);
参数:
sock:索引将要从其发送数据的套接字。
buf:指向将要发送数据的缓冲区。
len:以上缓冲区的长度。
flags:是以下零个或者多个标志的组合体,可通过or操作连在一起
MSG_DONTROUTE:不要使用网关来发送封包,只发送到直接联网的主机。这个标志主要用于诊断或者路由程序。
MSG_DONTWAIT:操作不会被阻塞。
MSG_EOR:终止一个记录。
MSG_MORE:调用者有更多的数据需要发送。
MSG_NOSIGNAL:当另一端终止连接时,请求在基于流的错误套接字上不要发送SIGPIPE信号。
MSG_OOB:发送out-of-band数据(需要优先处理的数据),同时现行协议必须支持此种操作。
to:指向存放接收端地址的区域,可以为NULL。
tolen:以上内存区的长度,可以为0。
send的Linux C 函数
经套接字传送消息
相关函数
sendto,sendmsg,recv,recvfrom,recvmsg,socket
表头文件
#include< sys/socket.h>
定义函数
ssize_t send(int s,const void*msg,size_t len,int flags);
参数说明
第一个参数指定发送端套接字描述符;
第二个参数指明一个存放应用程式要发送数据的缓冲区;
第三个参数指明实际要发送的数据的字符数;
第四个参数一般置0。
函数说明
send()用来将数据由指定的 socket传给对方主机。使用 send时套接字必须已经连接。send不包含传送失败的提示信息,如果检测到本地错误将返回-1。因此,如果send成功返回,并不必然表示连接另一端的进程接收数据。所保证的仅是当send成功返回时,数据已经无错误地发送到网络上。
对于支持为报文设限的协议,如果单个报文超过协议所支持的最大尺寸,send失败并将 errno设为 EMSGSIZE;对于字节流协议,send会阻塞直到整个数据被传输。
flags参数有如下的选择:
MSG_DONTROUTE勿将数据路由出本地网络
MSG_DONTWAIT允许非阻塞操作(等价于使用O_NONBLOCK)
MSG_EOR如果协议支持,此为记录结束
MSG_OOB如果协议支持,发送带外数据
MSG_NOSIGNAL禁止向系统发送异常信息
返回值
成功则返回实际传送出去的字符数,失败返回-1,错误原因存于errno中。
错误代码
EBADF参数 s非法的 socket处理代码。
EFAULT参数中有一指针指向无法存取的内存空间。
WNOTSOCK参数 s为一文件描述词,非 socket。
EINTR被信号所中断。
EAGAIN此动作会令进程阻断,但参数 s的 socket为不可阻断的。
ENOBUFS系统的缓冲内存不足。
EINVAL传给系统调用的参数不正确。