k_fd,(struct sockaddr *)&serv_add,sizeof(struct sockaddr))){
printf(“Error:unable to the establishconnection to socket(%i)…\n”,errno);
perror(“socks”);
close(sock_fd);
exit(1);
}
6. send(发送数据)
1>函数功能:函数send用来在TCP套接字上发送数据,send只能对处于连接状态的套接字使用。
2>函数原型
#include
#include
ssize_t send(int conn_fd,const void *msg,size_t len, int flags);
3>函数形参:
conn_fd:为已建立好连接的套接字描述符,即调用accept()函数后返回的套接字描述符。
msg:存放发送数据的缓冲区。
len:发送缓冲区的长度
flags:为控制选项,一般设置为0,或取以下值:
2 MSG_OOB:在指定的套接字上发送带外数据(out-of-band data),该类型的套接字必须支持带外数据(如:SOCK_STREAM).
2 MSG_DONTROUTE:通过最直接的路径发送数据,而忽略下层协议的路由设置。
4>返回值:
执行成功返回实际发送数据的字节数,出错则返回-1,错误代码存入errno中。
执行成功只是说明数据写入套接字的缓冲区中,并不表示数据已经成功地通过网络发送到目的地。
5>实例:
#define BUFFERSIZE 1500
char send_buf[BUFFERSIZE];
……
if(send(conn_fd,send_buf,len,0)< 0){
perror(“send”);
exit(1);
}
7. recv(接收数据)
1>函数功能:recv()用来TCP套接字上接收数据。函数recv从指定的套接字描述符上接收数据并保存到指定buf中。
2>函数原型
#include
#include
ssize_t recv(int conn_fd,void *buf,size_t len,int flags);
3>函数形参:
conn_fd: 为已建立好连接的套接字描述符,即调用accept()函数后返回的套接字描述符
buf:接收缓冲区
len:接收缓冲区的大小
flags:为控制选项,一般设置为0或取以下数值
2 MSG_OOB:请求接收带外数据
2 MSG_PEEK:只查看数据而不读出
2 MSG_WAITALL:只在接收缓冲区满时才返回。
4>函数返回值
函数执行成功返回接收到的数据字节数,出错返回-1,错误代码存入errno中。
5>实例:
#define BUFFERSIZE 1500
char recv_buf[BUFFERSIZE];
……
if(recv(conn_fd,recv_buf,sizeof(recv_buf),0)< 0){
perror(“recv”);
exit(1);
}
8. close
1>函数原型:
int close(int fd);
2>函数功能:
函数close用来关闭一个套接字描述符。
3>函数形参:
参数fd为一个套接字描述符。
4>返回值:
执行成功返回0,出错则返回-1.错误代码存入errno中。
说明:close()函数的头文件是#include.